子类QueryReadStore或ItemFileWriteStore包括写api和服务器端分页和排序。

时间:2012-03-29 09:41:45

标签: dojox.grid dojox.grid.datagrid dojo

我正在使用Struts 2,并希望包含一个可编辑的服务器端分页和排序网格。

我需要对QueryReadStore进行子类化以实现写入和通知API。我不想包含服务器端REST服务,所以我不想使用JsonRest存储。知道如何做到这一点。我必须覆盖哪些方法以及如何覆盖。我已经经历了很多例子,但我没有得到如何完成这件事。

也可以只扩展ItemFileWriteStore并覆盖其方法以包含服务器端分页?如果是,那么我需要覆盖哪些方法。我能举例说明如何做到这一点吗?

1 个答案:

答案 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