如何在商店代理的配置中使用api属性 - CRUD方法

时间:2012-11-06 13:39:12

标签: extjs

任何人都可以告诉我,我们应该在哪里编写创建/更新等代码片段。我是在代理的api属性下编写的。如何验证输出。请指导我如何使用商店api。

我正在进行测试,所以请让我更清楚地了解和使用该功能

1 个答案:

答案 0 :(得分:16)

配置本身在文档中为described here。但听起来你的语法是正确的。

您应该知道的第一件事是此配置仅适用于扩展Ext.data.proxy.Server的代理。阅读“代理类型”部分here

通过在此配置中定义不同的URL,您只需告诉商店 where 发送ajax请求以在服务器端执行不同的CRUD操作。

例如,对store.load()的调用会将ajax请求发送到api.read网址,您需要确保此网址正确返回数据。

Ext.data.Store在内部跟踪对“脏”记录(创建,更新或销毁)执行的其他操作。基于此,它将向适当的api配置URL发送ajax请求。或者如果您执行了不同类型的操作,例如创建和删除记录,它将发送多个ajax请求(每个URL一个)以及有关您创建或删除的记录的数据。

以下是一些示例代码来说明这一点(如果您填写自己的网址并data.model,也可以用于测试)。该示例使用默认的读取器/写入器,它将数据作为JSON发送到服务器(代理中有配置以指定不同的格式)。

var myStore = Ext.create('Ext.data.Store', {
    model: 'MyApp.model.SomeModel',
    proxy: {
        type: 'ajax',
        // without api defined ALL ajax calls will use the 'url' config
        url: '/some/url',
        api: {
            create: '/some/url/to/insert/records/in/db',
            read: '/some/url/to/select/records/from/db',
            update: '/some/url/to/update/records/in/db',
            destroy: '/some/url/to/delete/records/in/db'
        }
    }
}

// this calls the api.read URL
myStore.load(); 

// assuming we now have records, this will delete the first record 
// on the client side (it will error if there are not records)
myStore.remove(myStore.first());

// the store knows we deleted a record so this will call the api.destroy URL
myStore.sync();

// this updates the first record on the client side
myStore.first().set('some_field_name', 'a string value');

// now we are creating a record on the client side
myStore.add(Ext.create('MyApp.model.SomeModel'));

// the store knows we updated AND created a record so this will call the
// api.update URL AND the api.create URL
myStore.sync();

关于此的另外两个有用的信息:

  1. 有一个名为batchActions described here in the docs的代理配置。默认情况下为true,表示所有CRUD 发送时,某种类型的动作被分组为一个数组 对数据库的请求。例如。如果您删除了4条记录,那么您的 api.destroy网址不会收到4个ajax请求,它会收到1个 ajax请求包含4个记录的数组。这有助于减少 网络流量,只要您配置URL来处理 阵列。您可以将此配置设置为false,商店将发送4 请求api.destroy网址。你也可以设置 作家的allowSingle配置(described here)来确保 所有请求都作为数组发送,即使只有一个 记录(这样您就可以设置服务器端代码了 处理一个数组)。

  2. 设置
  3. Ext.data.Store来处理create和的回调     更新操作,您只需确保您的URL发回一个。     当您致电myStore.sync()时,商店将自动更换     客户端的记录与您发送的记录     打回来。这对于创建的记录很有用,因为您可以发送     使用创建的记录返回正确的数据库ID并拥有它     在客户端可用,稍后如果用户想要编辑或     删除您具有正确数据库ID的记录。您     也可以在服务器端进行其他处理并发回其他     数据以便你有一个完整的记录(例如我有时候     发回创建用户ID并创建时间。)