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 2

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

Теперь этого будет недостаточно, потому что прокси, как ожидается, будут манипулировать операцией. Вам придется прочитать код от других прокси, чтобы узнать, как это сделать. ServerProxy сохранил бы вам эту работу, но вы не работаете с HTTP-запросами ("ServerProxy в идеале должен называться HttpProxy"). Не повезло.

Таким образом, вы должны начать с чтения кода метода чтения MemoryProxy. Он предлагает, в одном единственном месте, пример всего (Я думаю) это ты должен сделать.

Тогда, может быть, вы можете пойти умнее об этом:

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); заполняет магазин должным образом. Спасибо за ответы, ребята...они помогли решить мою проблему.