【问题标题】:Ember.js Observer on computed property, not working. Example from guidesEmber.js 计算属性的观察者,不工作。指南中的示例
【发布时间】:2013-10-21 03:38:48
【问题描述】:

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

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

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

如果您添加,我可以找到:

person.get('fullName');

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

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

谢谢。

编辑-------

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

    您可以阅读here 的完整文章,未消耗的计算属性不会触发观察者

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

    希望对你有帮助。

    【讨论】:

    • 谢谢,我很高兴有这个链接来支持我的观察。
    • 在“init”的情况下,最好设置 .observers(..).on("init") 而不是“get in the init method”。
    • 万一有人像我一样来到这里,这个答案仍然适用于 Ember 2.0
    猜你喜欢
    • 2016-12-30
    • 2015-02-14
    • 2015-05-11
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2023-03-16
    • 2016-12-28
    • 2020-11-20
    相关资源
    最近更新 更多