2013-07-03 4 views
3

Я использую dojo 1.9 и gridx. Сетка инициализируется хранилищем памяти. Но когда данные изменились, я обновляю хранилище, но не вижу никаких изменений в сетке. Он не имеет метода refresh() (например, dgrid). Тем не менее, я нашел следующую последовательность:Как обновить сетку dojo после сохранения памяти?

  grid.model.clearCache(); 
      grid.model.setStore(store) 
      grid.body.refresh() 

Это приводит к сетке для отображения Loading... сообщения, но больше ничего не происходит.

Однако, paginator показывает правильное количество страниц, только контейнер сетки не передает строки.

Пример с фильтрами /gridx/tests/test_grid_filter.html из источников gridx имеет ту же проблему: Loading... сообщение, но нет данных.

Итак, первый вопрос: это ошибка? Если это не ошибка, как я должен сообщить сетке, что данные были изменены, и ее нужно перезагрузить?

ответ

3

мой предыдущий ответ работает, и, судя по upvotes это было полезно для других, но я нашел гораздо более простой способ, который не требует, чтобы повторно создать магазин:

grid.model.clearCache(); 
grid.model.store.setData(items) 
grid.body.refresh() 

основные операции является очистка кэша, устанавливая новые элементы, и заставляя обновления браузера.

Путаница заключается в том, что GridX обладает свойством «хранить», но это не тот объект, который используется для представления данных. Фактический объект - это хранилище, которое задано в модели, поэтому это объект, который необходимо изменить.

+1

Это не сработает, пока я не добавлю «grid.setStore (items);' before »grid.model.store.setData (items)' – DemiSheep

2

Сообщение Loading... было вызвано тем, как я объявил Grid. Я указал свойство columns, structure необходимо указать в первой строке.

Эта последовательность обновления слишком короткая. Вам нужно также повторно creade хранилище данных:

var storeData = { 
    identifier: 'id', 
    items: response.items 
}; 
grid.model.clearCache(); 
storeData.items = data.result 
store = new Memory({data: storeData}); 
grid.model.setStore(store) 
grid.body.refresh()