6

我正在学习 Ember.js 并阅读一些指南。我在这里阅读有关观察者的信息:http: //emberjs.com/guides/object-model/observers/

我想玩弄这个例子,所以我把它复制并粘贴到我的 js 文件中。在观察者回调中添加警报语句后,我惊讶地发现它没有被调用。

http://jsbin.com/UWEseSo/2/edit?js,输出

如果您添加,我能够找到:

person.get('fullName');

在调用设置 firstName 之前,将调用观察者回调。如果我在回调之后立即再次设置名字,则不会再次调用。

谁能解释这里发生了什么?

谢谢你。

编辑 - - - -

我已经对代码进行了更多的跟踪,现在我知道了为什么这种行为可能是这样的。尽管该示例似乎存在错误,但它可能只是一种优化。我之前观察到,如果我调用“get”,观察者就会工作。如果我不调用“get”,观察者将无法工作。我相信 Ember.js 可能只是对此很聪明,并且如果没有调用“get”,则故意不打扰调用观察者。他们这样做可能是因为如果没有“获取”,就没有理由调用观察者,因为应用程序不可能显示过时的信息。

一旦调用“get”,就会设置一个内部标志,以确保在下一个“set”上调用观察者。

4

1 回答 1

15

看起来您自己对这种行为的解释是正确的,并且为了确认您的假设,确实在 rc8 中引入了主要出于性能原因的更改。

你可以在这里阅读完整的文章,在未使用的计算属性下不触发观察者

这基本上意味着,如果您需要观察计算属性但当前没有检索它,只需get在您的init方法中即可。

希望能帮助到你。

于 2013-10-13T17:24:52.790 回答