我一直在研究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 documentation而previos SO discussion无法弄明白。
这是一个不显示差异的情况,因为它只是一个小应用程序吗?
答案 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
中,则只会在链的末尾调用一次。