我有一个 dojo.store.Memory 包装在 dojo.data.ObjectStore 中,然后将其插入 dataGrid 中。我想从商店中删除一个项目并更新网格。我尝试了所有我能想到的组合,但都没有成功。例如:
var combinedStore = new dojo.data.ObjectStore({objectStore: new dojo.store.Memory({data: combinedItems})});
combinedStore.fetch({query:{id: 'itemId'}, onComplete: function (items) {
var item = items[0];
combinedStore.deleteItem(item);
combinedGrid.setStore(combinedStore);
}});
combinedGrid.setStructure(gridLayout);
这不会引发任何错误,但合并存储.objectStore.data 仍然具有要删除的项目,并且网格仍然显示该项目。 (combinedStore.objectStore.data和combinedStore.objectStore.index之间似乎也完全不匹配);
最佳答案
幸运的是,有一个简单的解决方案!删除已成功进行,但是,您需要在删除后保存
ObjectStore 才能提交它。
将代码更改为如下所示:
onComplete: function (items) {
var item = items[0];
combinedStore.deleteItem(item);
combinedStore.save();
combinedGrid.setStore(combinedStore);
}
那个小小的保存应该可以解决问题。 (请注意:保存必须在 deleteItem之后发生 - 如果将其放在 fetch
block 之外,为了异步,它实际上会在 之前发生em> onComplete!)
工作示例:http://pastehtml.com/view/b34z5j2bc.html (检查您的控制台以获取结果。)
关于javascript - dojo.data.objectStore.deleteItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977880/