ExtJS 4.1: как объединить локальные данные с загруженными данными ajax в одном хранилище?

Я ищу способ объединить локальные данные с загруженными данными ajax в одном хранилище. Мне трудно объяснить это по-английски, я надеюсь, что этот фрагмент кода будет более явным:

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    fields: ['id', 'name'],
    proxy: { type: 'ajax', api: { read: '/read' }  },
    data: [{ id: 1, name: 'John' }]
});

Json, возвращенный «/read»: [{ id: 2, name: 'Jack' }].

Желаемое поведение: store.count() // 2


person leaf    schedule 13.09.2012    source источник


Ответы (1)


Вы можете использовать .load({addRecords: true} для добавления загруженных записей к существующим записям.

Конечно, если вы загрузите снова с включенным параметром addRecords: true, он снова добавит записи к существующим записям, что приведет к следующему:

[{ id: 1, name: 'John' },{ id: 2, name: 'Jack' },{ id: 2, name: 'Jack' }]

Вы можете реализовать обработчик перед загрузкой, чтобы сбросить хранилище до исходных данных и загрузить его снова, если вы хотите только [{ id: 1, name: 'John' },{ id: 2, name: 'Jack' }] каждый раз при повторной загрузке.

person VDP    schedule 13.09.2012
comment
Спасибо! Есть ли способ объявить это непосредственно в параметрах конфигурации? - person leaf; 13.09.2012
comment
Это действительно может сработать. Для хранилища необходимо установить значение autoLoad: false, иначе будет запущена стандартная операция загрузки, которая по умолчанию имеет значение addRecords: false. - person mistaecko; 13.09.2012
comment
Это не совсем соответствует тому, что я пытался сделать (addRecords: true как параметр конфигурации), но один store.load({ addRecords: true }) сразу после создания экземпляра — довольно хорошее решение. Спасибо всем! - person leaf; 13.09.2012