6

私はEmberの Todo MVC アプリに取り組んできました。モデル内で、 httpsEmber.run.once : //github.com/addyosmani/todomvc/blob/gh-pages/architecture-examples/emberjs/js/models/todo.js#でラップされた commit() メソッドの呼び出しに気付きました。 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');

しかし、目に見える違いは見られません。私はドキュメントを読みましたが、以前のSOの議論ではそれを理解できませんでした。

小さいアプリだから差が出ないというケースでしょうか?

4

1 に答える 1

5

別の質問への回答として答えを見つけました。

次のような配列の各項目にリスナーがある場合:

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.oncethis.categorize()リストで操作される各項目に対して呼び出されます。3 つの項目が変更された場合、3 つの呼び出しが発生します。categorize を でラップするEmber.run.onceと、チェーンの最後で 1 回だけ呼び出されます。

于 2013-04-03T07:27:39.643 に答える