Я думаю, что упускаю из виду что-то простое - я так близок к тому, чтобы сделать эту работу. :)
У меня есть сетка, которую необходимо обновить информацией о сервере.
Вот как это должно работать:
- Пользователь выбирает элемент
- Сделайте запрос JsonRest с выбранным идентификатором элемента.
- Обновить сетку — показать примечания, относящиеся к выбранному элементу
Вот как устроена сетка:
функция noteTabSetup() {
var store = JsonRest({target:"//localhost/program/notes", idAttribute:"id"});
var structure = [{ field: 'id', name: 'Id', width: '5em' },
{ field: 'name', name: 'Name', width: '12%' },
{ field: 'description', name: 'Description' }];
var noteGrid = new Grid({
id: 'noteGrid',
pageSize: 20,
store: store,
cacheClass: Cache,
structure: structure,
filterServerMode: true,
selectRowTriggerOnCell: true,
bodyLoadingInfo: "Loading notes ...",
bodyEmptyInfo: "No notes found",
modules: [SingleSort, VirtualVScroller, moveColumn,
selectColumn, dndColumn, selectRow, Filter]}, noteTab);
noteGrid.startup();
Когда элемент выбран, идентификатор выбранного элемента передается в:
function noteLoad(itemId) {
console.log("In NoteLoad");
var grid = registry.byId("noteGrid");
if (!itemIds || 0 === itemIds.length) { console.log("no ItemId chosen"); }
else {
console.log("In NoteLoad with an itemId");
grid.model.clearCache();
// Error on second run
grid.store.query({ find: "ByItem", item: itemId }).then(function(result) {
grid.setStore(new ItemFileReadStore({data: {items : result}}));
});
grid.body.refresh();
console.log("model: " + grid.rowCount());
};
};
На первом выбранном элементе все работает хорошо — запрос срабатывает, и сетка обновляется заметками, относящимися к выбранному элементу. На втором выбранном элементе я получаю эту ошибку от firebug:
TypeError: grid.store.query is not a function
grid.store.query({ find: "ByItem", item: itemIds }).then(function(result) {
-----------------------------------^
Есть идеи?! Заранее спасибо. Крис
Спасибо за ответ - это имеет смысл, что хранилище было заменено на ItemFileReadStore. Если возможно, я хотел бы использовать JsonRest напрямую для обновления сетки.
Я безуспешно пробовал несколько вариантов, основанных на вашем комментарии:
Запрос срабатывает и возвращается результат. Сетка не обновляется:
grid.model.clearCache();
grid.store.query({ find: "ByItem", item: itemIds }).then(function(results){
console.log('notes: ' + results[0].name);
});
grid.body.refresh();
Ошибка: grid.store.fetch не является функцией:
grid.store.fetch({ query: { find: "ByItem", item: itemIds }});
Синтаксическая ошибка в Dojo.js (строка 15):
grid.store.query({ find: "ByItem", item: itemIds }).then(function(result) {
grid.setStore(new JsonRest({data: {items : result}}));
});
Я сделал много поисков и не могу найти хороший пример, когда сетка обновляется из объекта JsonRest. Спасибо.