extjs фиксирует ответ от сервера к хранилищу
Я пытаюсь разработать свой собственный прокси (extends Ext.данные.полномочие.Полномочие). после получения ответа от моего сервера (json) я могу декодировать его и с помощью JSON reader я создаю набор записей для фиксации в хранилище. Как я понимаю, мне нужно создать объект операции и зафиксировать данные с помощью operation.commitRecords()
. Но эта строка if (clientRecords && clientRecords.length)
никогда не проходит, так как clientRecords не определен. Я не могу понять, как использовать этот объект и как его инициализировать. Вот мой текущий код:
options.action = options.action || 'read';
var operation = new Ext.data.Operation(options);
var json = reader.read(response);
operation.commitRecords(json.records);
Что я должен делать в приказать зафиксировать записи? Заранее спасибо!
2 ответа:
Это не прокси, который должен создать операцию,это хранилище. Затем он передает эту операцию прокси-серверу вместе с обратным вызовом. Прокси-сервер выполняет операцию по-своему и, когда это сделано, использует обратный вызов для уведомления хранилища.
Итак, краткий ответ на ваш вопрос заключается в том, что вам нужно выполнить обратный вызов, переданный методу CRUD, который вы реализуете. Скажем так:
read
( Амит прав, что некоторый контекст в вашем коде мог бы помочь). Так что это будет что-то вроде:// see, the operation is given to us read: function(operation, callback, scope) { var me = this; doWebsocketMagic(function() { // notify the store Ext.callback(callback, scope || me, [operation]); }); }
Теперь этого будет недостаточно, потому что прокси, как ожидается, будут манипулировать операцией. Вам придется прочитать код от других прокси, чтобы узнать, как это сделать.
Таким образом, вы должны начать с чтения кода метода чтения MemoryProxy. Он предлагает, в одном единственном месте, пример всего (Я думаю) это ты должен сделать.ServerProxy
сохранил бы вам эту работу, но вы не работаете с HTTP-запросами ("ServerProxy в идеале должен называться HttpProxy"). Не повезло.Тогда, может быть, вы можете пойти умнее об этом:
Ext.define('My.WebsocketProxy', { extend: 'Ext.data.proxy.Memory' ,read: function(operation, callback, scope) { var me = this; doWebsocketMagic(function(response) { me.data = response; Ext.data.proxy.Memory.prototype.read.call(me, operation, callback, scope); }); } });
Хорошо...После поиска того, как хранилище инициализирует операцию, он вызывает метод чтения прокси с функцией обратного вызова
onProxyLoad(operation);
. Таким образом, добавлениеstore.onProxyLoad(operation);
заполняет магазин должным образом. Спасибо за ответы, ребята...они помогли решить мою проблему.