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

时间:2011-11-15 18:19:23

标签: ajax sencha-touch

我不知道如何检测AJAX代理生成的HTTP请求是插入/更新还是删除操作。

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

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

这是我的Sencha Touch 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请求方法(动词)。

当我将代理类型从“rest”更改为“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请求既不是插入也不是更新,而是删除操作

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

任何帮助表示感谢。

谢谢,

乌韦

2 个答案:

答案 0 :(得分:2)

转到此处http://docs.sencha.com/touch/1-1/#!/api/Ext.data.AjaxProxy向下滚动到Url代,然后阅读有关Ext.data.Operation个对象以及如何使用它们的信息。

答案 1 :(得分:2)

AjaxProxy的actionMethods属性默认设置为

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

你可以简单地覆盖它:

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