我正在学习 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”上调用观察者。