Extjs буферизованный магазин загружает все новые добавленные элементы

Я пытаюсь использовать буферизованную комбинацию Ext (4.1.1) store/grid с данными, к которым я не могу получить доступ напрямую через остальные интерфейсы Api.. или около того, но входящие данные обрабатываются моим контроллером, и я хочу просто добавить эти данные в буферная сетка.

И здесь возникает проблема, когда я загружаю 500 предметов непосредственно в магазин, буферизация работает.. Только элементы, которые я вижу, обрабатываются, но когда я начинаю store.add(items) тогда все они автоматически отображаются...

Так что это мой магазин и сетка:

хранить

this.store = Ext.create('Ext.data.ArrayStore', {
    storeId: 'reportDataStore',
    fields: [
        { name: 'html'}
    ],
    buffered: true,
    pageSize: 100,
    autoLoad: true
});

сетка

  {
      xtype: 'gridpanel',
      flex: 1,
      hideHeaders: true,
      store: this.store,
      verticalScroller: {
          rowHeight: 43
      },
      disableSelection: true,
      columns: [
          { header: '', dataIndex: 'html', flex: 1 }
      ]
  }

Контроллер данных

...
// somewhere in initialization process of the controller, 
// I take the reportDataStore, for later reusing
    this.reportDataStore = Ext.getStore('reportDataStore');
...
onNewData: function(data) {
    this.reportDataStore.add(data)
}

Поэтому я ожидал, что данные попадут в хранилище, но будут визуализированы только видимые данные. Теперь это так, что все новые данные отображаются.

1 ответ

Решение

Я не смог создать рабочий пример с кодом, который вы даете, но у меня есть кое-что близкое... Как вам удалось добавить записи в буферизованное хранилище, поддерживаемое прокси памяти?

Вы должны попытаться отправить ваши новые данные напрямую на прокси, а затем перезагрузить хранилище, например так:

store.proxy.data.push(data);

grid.view.saveScrollState();

// should probably have been a call to reload(), but then the loading never ends...
store.load({
    callback: function() {
        grid.view.restoreScrollState();
    }
});

Посмотрите эту скрипку, которая пытается воспроизвести ваши настройки.

Другие вопросы по тегам