4

谁能告诉我我们应该在哪里编写创建/更新等代码片段。我是在proxy的api属性下写的。如何验证输出。请指导我如何使用 store api。

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

4

1 回答 1

16

配置本身在文档中进行了描述。但听起来你的语法是正确的。

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

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

例如,调用store.load()将向 URL 发送 ajax 请求,由api.read您来确保此 URL 正确返回数据。

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

下面是一些示例代码来说明这一点(如果您填写自己的 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 文档中有一个称为此处描述的代理配置。默认情况true下,这意味着当您向数据库发送请求时,某种类型的所有 CRUD 操作都会分组到一个数组中。例如,如果您删除了 4 条记录,您的 api.destroyURL 将不会收到 4 个 ajax 请求,它将收到 1 个带有 4 条记录数组的 ajax 请求。只要您将 URL 配置为处理数组,这有助于减少网络流量。您可以将此配置设置为false,商店将向api.destroyURL 发送 4 个请求。您还可以设置编写器的allowSingle配置(在此处描述)以确保所有请求都作为数组发送,即使只有一条记录(这样您就可以将服务器端代码设置为始终处理数组)。

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

于 2012-11-06T18:40:52.793 回答