1

Extjs4.1 MVC を使用しています。私がやろうとしているのは、いくつかのデータをサーバーに保存することですが、適切な形式や、データをサーバーに送信する方法がわかりません。これが私が考えていることですが、Ajax呼び出しはコントローラーにあるべきではないと思います.モデルまたはストアファイルにあるはずですか?

私のコントローラーのメソッド:

    submit: function(value) { 
    data = {"id": 100, "tdt": "rTk", "val": "445"}   // test data
    Ext.Ajax.request({
        url: 'http://test.myloc.com/providerSvc/dbproxy.php',
        params: {
          'do':'insert',
          'object': 'stk',
          'values': data
        },
        success: function(response){
            alert('response.responseText);
        }
    })
   }

私の店:

Ext.define('STK.store.Stack', {
extend: 'Ext.data.Store',
model: 'STK.model.Stack',
autoLoad: true,
proxy: {
    type: 'ajax',
    api: {
          read: 'http://test.myLoc.com/providerSvc/dbproxy.php?do=get&object=stack'
    },
    reader: {
        type: 'json',
        root: 'data',
        successProperty: 'success'
    },
    writer: {
        type: 'json'            
    }
}
});

私のモデル:

Ext.define('STK.model.Stack', {
extend: 'Ext.data.Model',
fields: ['id', 'tdt', 'val']
});
4

2 に答える 2

1

store.sync()GET と POST のエンドポイントが同じ場合にのみ機能します。

できることは、GET の場合、URL に連結するか、次のようなオブジェクトを作成して、extraParams を設定することです。

extraParams[urlKeys] = paramObject[urlKeys];
store.getProxy().setExtraParams(extraParams);

それから、

Store.getProxy().setUrl(StoreUrlForGET);
Store.load({
callback : function(rec, operation, success) {
if (success) {}
else {}
});

POST の場合、AJAX リクエストを次のように記述します。

Ext.Ajax.request({
url : StoreURLForPOST,
method : 'POST',
jsonData : Ext.JSON.encode(YourPostData),
success : function(response, request) {},
failure : function(response, request) {}
});

この AJAX リクエストでは、次のことができます。

Ext.Ajax.setDefaultHeaders({
"TokenId" : TokenValue
});

このコードはすべてコントローラーに入ります。

于 2013-01-08T08:05:13.017 に答える
0

ストアは ajax 呼び出しを行うのに適切な場所だと思います。

1 つのレコードをストアに追加してから「sync()」関数を呼び出すことで、1 つのレコードを「保存」できます。

このようなもの(注意:コードはテストされていません):

    var store = Ext.create("STK.store.Stack");


    var record =  Ext.create("STK.model.Stack");

    record.set(xvalues);
    record.isDirty = true;
    record.setDirty(true);  // I don't know if this line is required

    store.add(record);


    store.sync({
        success: function(batch, options){

          alert("OK!")                

        },
        failure: function(batch, options){ 
           alert("failure!")
        }
    });
于 2013-01-07T21:27:13.770 に答える