繁体   English   中英

Ember.js:如何防止多次击中该属性观察器?

[英]Ember.js: How do I prevent this property observer from being hit more than once?

在我的控制器中,我有一个属性和一个观察该属性的函数。 当属性更改一次时,观察者将被击中3次-用旧数据两次,用新数据一次。 您可以在刚刚创建的jsbin的控制台窗口中看到它的发生:

jsbin

用法:单击其中一本书(不是第一本书),然后在控制台窗口中查看结果。

在我的实际应用中,要执行的工作需要异步下载。 由于三击,该观察者两次下载了错误的内容,一次下载了正确的内容。 使这个问题更加明显的是异步响应不会按顺序返回。 :)

临时解决方案是安排下载代码在以后运行。

我不确定为什么会这样,但是指南提供了一种解决方法。 他们建议如下:

bookObserver: function() {
    Ember.run.once(this, 'bookWasChanged');
}.observes('book'),

bookWasChanged: function() {
    // This will only run once per run loop
}

就我个人而言,我总是假设观察者即使在我不希望他们射击的情况下也可以解雇。 例如,使用此代码,我将执行以下操作:

bookObserver: function() {
    var book = this.get('book');
    var lastBook = this.get('lastBook');

    if (book !== lastBook) {
        this.set('lastBook', book);
        doSomethingWithBook(book);
    }
}.observes('book')

这样,即使Ember打电话给您的观察员1000次,您也只会在书实际更改时去做您想要的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM