如何在 Sencha Touch 2 proxy/model/store/whatever 上设置 CRUD 方法?

Posted

技术标签:

【中文标题】如何在 Sencha Touch 2 proxy/model/store/whatever 上设置 CRUD 方法?【英文标题】:How to set CRUD methods on Sencha Touch 2 proxy/model/store/whatever? 【发布时间】:2012-03-03 23:20:08 【问题描述】:

我正在与合作伙伴一起构建 Sencha Touch 2 数据库应用程序。他在后端为我构建了大量的方法,语法如下:

index.php?r=show/update index.php?r=show/add index.php?r=show/delete index.php?r=person/add

每一个都希望与它一起发送一个 POST。

我正在努力解决代理应该是什么样子的问题 - 例如,有没有办法指定将 /update /add 和 /delete 映射到其关联的 U/C/D 操作的显示代理?代理中只有一个 url,用于获取操作(在本例中为 getByUser)

我假设我想以某种方式将其他操作放入代理中 - 还是我只需要为每个操作设置一堆不同的代理(这似乎有点多余......)

Sencha 文档暗示 CRUD 操作是内置于代理的,但我看不出它们的 url 在哪里或如何定义...

Ext.define('SMToolkit.store.Shows', 
extend: 'Ext.data.Store',

config: 
    model: 'SMToolkit.model.Show',
    autoLoad: true,
    sorters: 'name',
    grouper: 
        groupFn: function(record) 
            return record.get('type');
        
    ,
    proxy: 
        type: 'ajax',
        url : 'index.php?r=show/getByUser&username=FOO'
    

);

使用如下所示的模型:

Ext.define('SMToolkit.model.Show', 
extend: 'Ext.data.Model',

config: 
    fields: [
        'id',
        'name',
        'opening',
        'closing',
        'rehearsal',
        'type',
        'availability'
    ]

);

【问题讨论】:

【参考方案1】:

当您应该为每个操作提供一个特定的 URL 时,ST2 会为您提供 API 属性。您应该将您的代理更改为:

proxy: 
   type: 'ajax',
   api: 
     create : 'index.php?r=show/add',
     read   : 'index.php?r=show/read',
     update : 'index.php?r=show/update',
     destroy: 'index.php?r=show/delete'
   

请注意,我删除了 url 属性并添加了 api 属性。此外,要删除,您必须输入单词“destroy”,因为在 javascript 中,“delete”是保留字。

【讨论】:

以上是关于如何在 Sencha Touch 2 proxy/model/store/whatever 上设置 CRUD 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sencha Touch 2 模型中存储日期

从其他商店访问商店 - Sencha Touch

Sencha Touch 2:数据集成或如何在sencha和javascript之间共享动态信息

Sencha Touch 2如何清理资源

如何在 Sencha Touch 2 中使用 Sqlite

如何在 Sencha-Touch2.0 的地图中获取当前位置的标记