我创建了一个Grid组件,其商店配置如下:
//Create the store
config.store = new Ext.data.Store({
restful: true,
autoSave: false,
batch: true,
writer: new Ext.data.JsonWriter({
encode: false
}),
reader: new Ext.data.JsonReader({
totalProperty: 'total',
root: 'data',
fields: cfg.fields
}),
proxy: new Ext.data.HttpProxy({
url:cfg.rest,
listeners:{
exception: {
fn: function(proxy, type, action, options, response, arg) {
this.fireEvent('exception', proxy, type, action, options, response, arg);
},
scope: this
}
}
}),
remoteSort: true,
successProperty: 'success',
baseParams: {
start: 0,
limit: cfg.pageSize || 15
},
autoLoad: true,
listeners: {
load: {
fn: function() {
this.el.unmask();
},
scope: this
},
beforeload: {
fn: function() {
this.el.mask("Working");
},
scope: this
},
save: {
fn: function(store, batch, data) {
this.el.unmask();
this.fireEvent('save', store, batch, data);
},
scope: this
},
beforewrite: {
fn: function(){
this.el.mask("Working...");
},
scope: this
}
}
});
注意:忽略fireEvents。此存储正在共享的自定义网格组件中配置。
但是,我在这里遇到一个问题:无论我做了什么CRUD操作,我总是向服务器发出N个请求,它等于我选择的N行。即,如果我选择10行并点击删除,则将向服务器发出10个DELETE请求。
例如,这是我删除记录的方式:
/**
* Call this to delete selected items. No confirmation needed
*/
_deleteSelectedItems: function() {
var selections = this.getSelectionModel().getSelections();
if (selections.length > 0) {
this.store.remove(selections);
}
this.store.save();
this.store.reload();
},
注意:“this”的范围是网格组件。
那么,它是否应该是那样的?还是我的配置问题?
我正在使用Extjs 3.3.1,并根据Ext.data.Store下的batch
文档,
如果Store是RESTful,DataProxy也是RESTful,并为每条记录生成一个唯一的事务。
我希望这是我的配置问题。
注意:我尝试了listful
中的encode
,writeAllFields
,encodeDelete
,Ext.data.JsonWriter
......没有希望
答案 0 :(得分:6)
只为那些可能想知道为什么不批处理的人:
至于所述文件,
如果Store是RESTful,DataProxy也是RESTful,并为每条记录生成一个唯一的事务。
如果您在Ext.data.Store
/src/data/Store.js
的源代码,情况就是如此
第309行,@constructor
// If Store is RESTful, so too is the DataProxy
if (this.restful === true && this.proxy) {
// When operating RESTfully, a unique transaction is generated for each record.
// TODO might want to allow implemention of faux REST where batch is possible using RESTful routes only.
this.batch = false;
Ext.data.Api.restify(this.proxy);
}
所以这就是为什么我意识到当我使用restful
时,我的batch
将永远不会更改为true
。
答案 1 :(得分:2)
您正确阅读了文档;它应该以这种方式工作。无论何时选择是否在网格上使用RESTful存储,都需要考虑这个问题。如果您需要批量操作,RESTful商店不是您的朋友。遗憾。