(dojo)Observable无法观察Memory Store中的更改
(dojo) Observable cannot observe changes in Memory Store
我有以下代码来实现Observable Memory Store
var inventory = [
{name:"shoes", quantity:10, category:"sales"},
{name:"clothes", quantity:5, category:"sales"},
{name:"hats", quantity:2, category:"sales"},
{name:"shirts", quantity:20, category:"sales"}
];
var inventoryStore = new Memory({data:inventory, idProperty: "name"});
var observer = new Observable(inventoryStore);
results = observer.query({});
results.observe(function(item, removedIndex, insertedIndex) {
if(removedIndex > -1) {
console.log("removed");
}
if(insertedIndex > -1) {
console.log("added");
}
console.log("Listened");
}, true);
inventoryStore.put(someObject);
有趣的是,该代码不听取inventoryStore
中所做的更改。我希望它在inventoryStore
中发生任何事情时都会调用observe()
方法,但它没有。相反,如果我把对象放在observer
而不是inventoryStore
中,那么它就会侦听。
如果我像下面的一样更改代码
var inventoryStore = new Observable(Memory({data:inventory, idProperty: "name"}));
results = inventoryStore.query({});
inventoryStore.put(someObject);
那么它就起作用了。令人沮丧的是,即使我遵循了文档中的确切代码,它也不起作用。
我之所以必须使用第一个代码块(将对象放在inventoryStore
中,而不是放在observer
中),是因为我的一些对象不能存储在Observable Memory中,只能存储在Memory中。如有任何建议,我们将不胜感激:)
经过数小时的测试,发现要观察Memory Store
的变化,必须通过Observable对象而不是通过Memory
来观察add / remove / update
对象。这意味着您有two options to implement this
。
var inventoryStore = new Memory({data:inventory, idProperty:"name"});
var observer = new Observable(inventoryStore);
results = observer.query({});
observer.put(someObject);
或
var inventoryStore = new Observable(new Memory({data:inventory, idProperty:"name"});
results = inventoryStore.query({});
inventoryStore.put(someObject);
这可能看起来很明显,但我对这个链接下的教程感到困惑。
http://www.tulek.org/2011/04/14/dojo-memory-and-observable-classes/
此外,
observer.setData(another Inventory);
不触发CCD_ 12方法,而只是更改观察器中的数据存储。这导致Observable and Memory Store
之间的mismatching
数据存储,因为内存存储仍具有原始库存集。
我的一些对象无法存储在Observable
中的原因是我使用了dojo/calendar/Calendar
,并且它引用了Memory中的一些对象,这些对象由于属性名称不匹配而调用了一些奇怪的方法。
我希望你们中没有人会因为这件事而受苦
虽然这篇文章已经2年了,但我确实从中受益,因为我也遇到了同样的问题。但我的错误是在调用observe方法(facepalm)时将overwrite标志设置为第二个参数。
因此,如果你们中的任何人仍然坚持这个问题,请确保设置includeObjectUpdates参数。
resultSet.observe(listener, includeObjectUpdates);
再见。
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- Query JS Ext.data.Store
- 回流:让多个组件访问同一个Store
- JavaScript 将“memory”返回为 0,即使我增加或减少它的值
- 相当于 Jquery/Backbone.js 中的 Dgrid/Store (Dojo 工具包)
- 如何将数据从Ext.Store保存到数组
- dojo-dgrid带有store from url(json数据)重载/刷新按钮
- 如何从 store.sync();获取返回消息
- 如何从xhrpost函数中检索响应数据并将该对象存储在dojo/store中
- Sencha Touch Store配置属性仅在“__proto__”;
- 如何使用Dojo Store进行客户端数据缓存
- ES6 class store
- 何时创建新的Flux Store
- AngularJS ng repeat没有't在LocalStorage更改时更新(使用store.js)
- Ember数据:在DS.Store.createRecord上刷新模型
- 使用Javascript、Jquery或Ajax动态插入Yahoo Merchant Store目录标签
- FS.Store 不可靠的GM图像转换
- Sencha ExtJS store.nextPage() 然后 store.first() 给出前一页的第一条记录
- (dojo)Observable无法观察Memory Store中的更改
- 使用XML创建dojo.store.memory