TodoMVC - Ember.run.once
ember.js, todomvc
Solution
I found the answer as a response to another question.
If you have a listener on each item of an array like this:
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');
}
});
Without `Ember.run.once`, `this.categorize()` will be called for each item manipulated in the list. If three items are modified, then there will be three calls. With categorize wrapped in `Ember.run.once` , it will be only called once at the end of the chain.
Problem
I've been working on the Todo MVC App for Ember. In the model, I noticed a call to a commit() method wrapped in `Ember.run.once` See: 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'); ``` How does wrapping `this.get('store').commit()` in `Ember.run.once` help? I changed the method to just do: ``` todoDidChange: function () { this.get('store').commit(); }.observes('isCompleted', 'title'); ``` But I dont see any visible difference. I read the documentation and a previos SO discussion haven't been able to figure it out. Is this a case where the difference doesn't show because it's just a small app?