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 调用的合适场所。

您可以通过将一条记录添加到存储中来“保存”一条记录,然后调用“sync()”函数。

像这样的东西(注意:代码未经测试):

    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 回答