(dojo)Observable无法观察到Memory Store中的更改 [英] (dojo) Observable cannot observe changes in Memory Store

查看:106
本文介绍了(dojo)Observable无法观察到Memory Store中的更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码来实现Observable Memory Store

I have the following code to implement 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()方法,但不会。相反,如果我将对象放在观察器中,而不是 inventoryStore ,那么它会侦听。

Interestingly, the code does not listen to the changes made in inventoryStore. I expected it to call observe() method whenever something happens in the inventoryStore but it does not. Instead, if I put object in the observer not inventoryStore then it listens.

如果我更改代码,如下所示

If I change the code like the follow

var inventoryStore = new Observable(Memory({data:inventory, idProperty: "name"}));
results = inventoryStore.query({});
inventoryStore.put(someObject);

然后它工作。这是令人沮丧的,即使我遵循文档中的确切代码,它不起作用。

then it works. This is frustrating that even I followed exact code from the documentation and it does not work.

为什么我必须使用第一个代码块(将对象放在 inventoryStore 中而不是 observer )是我的某些对象不能存储在可观察内存中,但只能在内存中。
任何建议将不胜感激:)

The reason why I have to use the first code block (putting object in inventoryStore not in observer) is that some of my object can't be stored in Observable Memory but only in Memory. Any advice will be appreciated :)

推荐答案

经过几个小时的测试,事实证明, code>内存商店,您必须通过Observable对象不通过内存添加/删除/更新
这意味着你有两个选项来实现这个

After hours of testing, it turns out that to observe changes in Memory Store, you have to add / remove / update objects through Observable object not through the Memory. This means you have 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);

这可能看起来很明显,但我在本链接下面的教程之后感到困惑。

This may seem obvious but I was confused following the tutorial under this link.

http://www.tulek .org / 2011/04/14 / dojo-memory-and-observable-classes /

此外,

observer.setData(another Inventory);

不触发 observe()方法,但只是在观察者中更改数据存储,这导致不匹配数据存储在可观察和内存存储之前,因为内存存储仍然具有原始库存集。

does not fire the observe() method but just change data store in the observer. This causes mismatching data store between Observable and Memory Store since Memory Store still has the original inventory set.

我的某些对象无法存储在我使用的可观察中d dojo / calendar / Calendar ,它引用了内存中由于属性名称不匹配而调用一些奇怪方法的一些对象。

The reason why some of my object couldn't be stored in Observable was that I used dojo/calendar/Calendar and it had a reference to some of the objects from the Memory that call some weird method due to property name mismatched.

我希望你们中没有人会遇到这个问题。 :)

I hope none of you people suffer from this matter. :)

这篇关于(dojo)Observable无法观察到Memory Store中的更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆