【问题标题】:Removing records from a store using an AJAX proxy in Sencha Touch 1.1在 Sencha Touch 1.1 中使用 AJAX 代理从商店中删除记录
【发布时间】:2011-11-15 18:19:23
【问题描述】:

我不知道如何检测 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 请求既不是插入也不是更新,而是删除操作

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

任何帮助表示赞赏。

谢谢,

呜呜

【问题讨论】:

    标签: ajax sencha-touch


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我已经读过了。所有这些示例都展示了如何将这样的自定义操作作为参数传递给代理的 read 方法。但我正在与一家商店合作,调用它的同步方法。我看不出这些示例如何帮助我根据它们的操作使生成的 HTTP 请求不同。请指教。
    【解决方案2】:

    AjaxProxy的actionMethods属性默认设置为

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

    你可以简单地覆盖它:

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

    【讨论】:

      猜你喜欢
      • 2013-03-19
      • 2017-09-05
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 2014-03-03
      • 2014-08-04
      相关资源
      最近更新 更多