在Sencha Touch 1.1中使用AJAX代理从商店中删除记录

问题描述:

我不知道如何检测AJAX代理生成的HTTP请求是插入/更新还是删除操作。在Sencha Touch 1.1中使用AJAX代理从商店中删除记录

这些是我的数据(simpsons.json):

[ 
    { 
     "id": 1, 
     "firstName": "Homer" 
    }, 
    { 
     "id": 2, 
     "firstName": "Marge" 
    }, 
    { 
     "id": 3, 
     "firstName": "Bart" 
    }, 
    { 
     "id": 4, 
     "firstName": "Lisa" 
    } 
] 

这是我的煎茶触摸1.1代码:

Character = Ext.regModel('Character', { 
    fields: [ 
     {name: 'id', type: 'int'}, 
     {name: 'firstName', type: 'string'} 
    ] 
}); 

SimpsonsStore = new Ext.data.Store({ 
    model: 'Character', 
    proxy: { 
     type: 'rest', 
     url: 'simpsons.json' 
    }, 
    autoLoad: true 
}); 

SimpsonsStore.on('load', function(store, records, success) { 

    // add record 
    store.add({id: 5, firstName: 'Maggie'}); 

    // update record 
    var margeRecord = store.findRecord('firstName', 'Marge'); 
    margeRecord.set('firstName', 'Marjorie'); 

    // delete record 
    var homerRecord = store.findRecord('firstName', 'Homer'); 
    store.remove(homerRecord); 

    // sync store 
    store.sync(); 
}); 

运行该代码生成这些HTTP请求:

POST /simpsons.json/5?_dc=1321377134028 HTTP/1.1 

{"records":[{"id":5,"firstName":"Maggie"}]} 

PUT /simpsons.json/2?_dc=1321377142625 HTTP/1.1 

{"records":[{"id":2,"firstName":"Marjorie"}]} 

DELETE /simpsons.json/1?_dc=1321377148457 HTTP/1.1 

{"records":[{"id":1,"firstName":"Homer"}]} 

像这样,每个操作都有自己的HTTP请求方法(动词)。

当我从“休息”更改代理服务器类型为“AJAX”生成的HTTP请求看起来像这些:

POST /simpsons.json?_dc=1321376787918 HTTP/1.1 

{"records":[{"id":5,"firstName":"Maggie"}]} 

POST /simpsons.json?_dc=1321376792207 HTTP/1.1 

{"records":[{"id":2,"firstName":"Marjorie"}]} 

POST /simpsons.json?_dc=1321376798158 HTTP/1.1 

{"records":[{"id":1,"firstName":"Homer"}]} 

正如你可以看到这些看起来非常相似。这对插入或更新操作不是问题。但是后台如何检测到最后一个HTTP请求是既不是插入也不是更新但是删除操作

我在Sencha Touch 2.0中发现了一个“api”配置选项,因为它存在于Ext JS 4中,但我没有找到一种方法来为Sencha Touch 1.1中的AJAX代理的特定操作定义不同的URL或参数。

任何帮助表示赞赏。

感谢,

乌韦

转到这里http://docs.sencha.com/touch/1-1/#!/api/Ext.data.AjaxProxy向下滚动到URL生成,并阅读有关Ext.data.Operation对象以及如何使用它们。

+0

感谢。我已经读过这个。所有这些示例都显示了如何将这种自定义操作作为参数传递给代理的读取方法。但我正在与一家商店合作,调用其同步方法。我看不出这些示例如何帮助我根据自己的操作将生成的HTTP请求区分开来。请指教。 – urk

的actionMethods的AjaxProxy的属性默认设置为

{create: "POST", read: "GET", update: "POST", destroy: "POST"} 

你可以简单地将其覆盖:

store.getProxy().actionMethods = { 
    create: "POST", 
    read: "GET", 
    update: "PUT", 
    destroy: "DELETE" 
};