Подкласс QueryReadStore или ItemFileWriteStore для включения API записи и подкачки и сортировки на стороне сервера. - PullRequest
1 голос
/ 29 марта 2012

Я использую Struts 2 и хочу включить редактируемую сетку подкачки и сортировки на стороне сервера.

Мне нужно создать подкласс QueryReadStore для реализации API записи и уведомлений. Я не хочу включать службы REST на стороне сервера, поэтому я не хочу использовать магазин JsonRest. Есть идеи, как это можно сделать. Какие методы мне нужно переопределить и как именно. Я прошел через много примеров, но я не понимаю, как это можно сделать точно.

Также возможно ли просто расширить ItemFileWriteStore и просто переопределить его методы, чтобы включить нумерацию на стороне сервера? Если так, то какие методы мне нужно переопределить. Могу ли я получить пример того, как это можно сделать?

1 Ответ

1 голос
/ 29 апреля 2012

Ответ, конечно, да :) Но действительно ли вам нужно создать подкласс ItemFileWriteStore, он не соответствует вашим потребностям? Краткое объяснение .save () следует.

Clientside изменяет / обновляет / удаляет в магазине, и, в свою очередь, эти элементы помечаются как грязные. При наличии грязных предметов в магазине будут храниться ссылки на те, что в хасе, например:

store._pending = { _deletedItems: [], _modifiedItems: [], _newItems: [] };

При вызове save () каждый из них должен быть зациклен, посылая запросы на сервер НО, этого не происходит, если не определены ни _saveEverything, ни _saveCustom. WriteStore просто сбрасывает свою функцию возврата на стороне клиента и сохраняет в памяти клиента. См. Источник поиск "сохранить: функция"

Вот моя реализация простого 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 содержит нумерацию страниц из своих миксинов суперкласса. Вам просто нужно вызвать его с двумя установками, одна из которых находится непосредственно в хранилище, то есть сервер должен возвращать только подмножество - или в модели с возможностями запроса, где сервер возвращает полный комплект.

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
});

демонстрация по делу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...