我正在使用Struts 2,并希望包含一个可编辑的服务器端分页和排序网格。
我需要对QueryReadStore进行子类化以实现写入和通知API。我不想包含服务器端REST服务,所以我不想使用JsonRest存储。知道如何做到这一点。我必须覆盖哪些方法以及如何覆盖。我已经经历了很多例子,但我没有得到如何完成这件事。
也可以只扩展ItemFileWriteStore并覆盖其方法以包含服务器端分页?如果是,那么我需要覆盖哪些方法。我能举例说明如何做到这一点吗?
答案 0 :(得分:1)
答案是肯定的:) 但是你真的需要继承ItemFileWriteStore,它是否不适合你的需求?接下来简要介绍了.save()。
Clientside会在商店中修改/ new / delete,然后将这些商品标记为脏。虽然有脏物品,商店会保留对货物中的物品的引用,如下:
store._pending = { _deletedItems: [], _modifiedItems: [], _newItems: [] };
在调用save()时,每个都应循环,向服务器BUT发送请求,如果既未定义_saveEverything或_saveCustom也不会发生这种情况。 WriteStore只是重置其客户端恢复功能并保存在客户端内存中。 See source搜索"保存:功能"
这是我对一个简单的writeAPI的实现,必须修改才能使用而不使用它内置的验证: OoCmS._storeAPI
简而言之,请遵循此锅炉,因为您将在服务器上拥有CRUD模式:
new ItemFileWriteStore( {
url: 'path/to/c**R**ud',
_saveCustom: function() {
for(var i in this._pending._newItems) if(this._pending._deletedItems.hasOwnProperty(i)) {
item = this._getItemByIdentity(i);
dxhr.post({ url: 'path/to/**C**rud', contents: { id:i }});
}
for(i in this._pending._modifiedItems) if(this._pending._deletedItems.hasOwnProperty(i)) {
item = this._getItemByIdentity(i);
dxhr.post({ url: 'path/to/cr**U**d', contents: { id:i }});
}
for(i in this._pending._deletedItems) if(this._pending._deletedItems.hasOwnProperty(i)) {
item = this._getItemByIdentity(i);
dxhr.post({ url: 'path/to/cru**D**', contents: { id:i }});
}
});
现在;至于分页,ItemFileWriteStore从它的超类mixins中分页。你只需要用两个设置调用它,一个直接在商店意味着服务器应该只返回一个子集 - 或者在具有查询capeabilities的模型上,其中服务器返回一个全套。
var pageSize = 5, // lets say 5 items pr request
currentPage = 2; // note, starting on second page (with *one* being offset)
store.fetch({
onComplete: function(itemsReceived) { },
query: { foo: 'bar*' }, // optional filtering, server gets json urlencoded
count: pageSize, // server gets &count=pageSize
start: currentPage*pageSize-pageSize // server gets &start=offsetCalculation
});
quod erat demonstrandum