Ember.js计算属性的观察者,不起作用.指南中的示例



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

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

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

如果您添加以下内容,我能够找到:

person.get('fullName');

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

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

谢谢。

编辑-------

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

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

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

您可以在此处阅读有关此的完整文章,在未使用的计算属性不会触发观察器

这基本上意味着,如果您需要观察计算属性但当前未检索它,只需将其getinit方法中即可。

希望对您有所帮助。

最新更新