TodoMVC - Ember.run.once

时间:2013-03-28 07:57:08

标签: ember.js todomvc

我一直在研究Todo MVC App for Ember。在模型中,我注意到对Ember.run.once中包含的commit()方法的调用请参阅:https://github.com/addyosmani/todomvc/blob/gh-pages/architecture-examples/emberjs/js/models/todo.js#L9

todoDidChange: function () {
    Ember.run.once(this, function () {
        this.get('store').commit();
    });
}.observes('isCompleted', 'title');

如何在this.get('store').commit()中包裹Ember.run.once有用吗?我把方法改为:

todoDidChange: function () {
    this.get('store').commit();
}.observes('isCompleted', 'title');

但我没有看到任何明显的差异。我看过the documentationprevios SO discussion无法弄明白。

这是一个不显示差异的情况,因为它只是一个小应用程序吗?

1 个答案:

答案 0 :(得分:5)

我发现答案为response to another question

如果你对数组的每个项目都有一个监听器:

App.IssuesController = Ember.ArrayController.extend({ 
    issue_list: ['a','b','c'],
    issueListObserver : function(){
        Ember.run.once(this, this.categorize);
    }.observes('issue_list.@each"),

    this.categorize: function () {
        console.log('foo');
    }
});

如果没有Ember.run.once,则会为列表中操作的每个项调用this.categorize()。如果修改了三个项目,则会有三个调用。如果分类包含在Ember.run.once中,则只会在链的末尾调用一次。