我有以下代码来实现 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 Store
中的变化,您必须通过 Observable 对象而不是
。
这意味着您有添加/删除/更新
对象>内存两个选项来实现它
。
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);
不会触发 observe()
方法,而只是更改观察者中的数据存储。这会导致 Observable 和 Memory Store
之间的数据存储不匹配
,因为 Memory Store 仍然具有原始库存集。
我的一些对象不能存储在 Observable
中的原因是我使用了 dojo/calendar/Calendar
并且它引用了一些对象由于属性名称不匹配,从内存中调用了一些奇怪的方法。
希望大家不要因为这件事而苦恼。 :)
关于javascript - (dojo)Observable无法观察到Memory Store的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18178792/