Ответ, конечно, да :)
Но действительно ли вам нужно создать подкласс 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
});
демонстрация по делу