我正在学习Ember.js并浏览一些指南.我在这里阅读观察者:http: //emberjs.com/guides/object-model/observers/
我想玩这个例子,所以我复制并粘贴到我的js文件中.在向观察者回调添加警告语句后,我惊讶地发现它没有被调用.
http://jsbin.com/UWEseSo/2/edit?js,output
我能够找到,如果你添加:
person.get('fullName');
Run Code Online (Sandbox Code Playgroud)
在调用设置firstName之前,将调用观察者回调.如果在再次不再调用回调之后立即再次设置第一个名称.
谁能解释一下这里发生了什么?
谢谢.
编辑 - - - -
我已经对代码进行了更多跟踪,现在我已经了解了为什么这种行为可能是这样的.虽然这个例子似乎有一个bug,但它可能只是一个优化.我之前观察到,如果我打电话给"获取",观察者就会工作.如果我没有打电话给"获取",观察者将无法工作.我相信Ember.js可能只是对此很聪明,如果没有调用"get",故意不打扰调用观察者.他们可能这样做是因为如果没有"get",就没有理由调用观察者,因为应用程序不可能显示过时信息.
一旦调用了"get",就会设置内部标志以确保在下一个"set"上调用观察者.