javascript - (dojo)Observable无法观察到Memory Store的变化

标签 javascript memory dojo store observable

我有以下代码来实现 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/

相关文章:

javascript - Dojo FilteringSelect 仅触发一次 OnChange 事件

html - 为 DOJO 中的禁用按钮设置 CSS

javascript - 如何选择正确的 'this' 选择器?

c++ - 从 mmap() 读取时 ntohl() 返回 0

c# - UWP Windows 10 应用程序内存在导航时增加

c - C 中 strncpy 的内存混淆

javascript - 类型错误 : Undefined is not a function (esri map)

javascript - windows.onload 和 setInterval 仍然需要手动刷新才能工作

javascript - 无法让简单的 Bootstrap 模式工作

javascript - gmail标签选择器难题-有更好的方法吗?