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

Posted

技术标签:

【中文标题】在 Sencha Touch 1.1 中使用 AJAX 代理从商店中删除记录【英文标题】:Removing records from a store using an AJAX proxy in Sencha Touch 1.1 【发布时间】: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 或参数。

任何帮助表示赞赏。

谢谢,

呜呜

【问题讨论】:

【参考方案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"
;

【讨论】:

以上是关于在 Sencha Touch 1.1 中使用 AJAX 代理从商店中删除记录的主要内容,如果未能解决你的问题,请参考以下文章

Sencha Touch 工作流程

在 Sencha Touch MVC 框架中声明和调用视图时出错。

将 Sencha Touch 1.X 升级到 Sencha Touch 2.X

Sencha-Touch:未捕获的类型错误:无法读取未定义的属性“代理”

[Sencha ExtJS & Touch] 在Sencha(Extjs/Touch)应用程序中使用plugins(插件)和mixins(混入)

无法在 Sencha-Touch2 中使用 Ext.Ajax 运行 javascript?