0

私はBackbone.jsプロジェクトに取り組んでおり、collection.onまたはいわゆるバインディングについてかなり混乱しています。

これが私のビューのコードの一部です。

initialize: function(){
        this.accCollection = this.options.accCollection;
        //Nothing shows without this line, which renders 3 times
        this.accCollection.on('all', this.render, this); 
        this.accCollection.fetch({
            success:function(){
                this.render;  
            }
        });
    },

    render: function(){
        $('.currentPage').html("<h3>Accounts</h3>");
        console.log(this.accCollection.models);
        //Render it in jade template  
        this.$el.html(this.template({accCollection:this.accCollection.models}));
        return this;
    }

だから私が理解していないのは、なぜこの行がないとうまくいかないのかということです。「all」および「add」で on を使用すると機能します。それは私のフェッチで最初に空のデータをレンダリングせず、2番目に3番目にいっぱいになったために機能しますか? 混乱している!

this.accCollection.on('all', this.render, this); 

さらに情報を提供する必要があるかどうか教えてください。質問を編集します。

/よろしく

4

1 に答える 1

2

いくつかのこと:

  1. ビューでは、次のようにする必要がありますthis.listenTo(以下の例): これにより、ビューが破棄されたときにイベントが委譲されなくなります。
  2. successコールバックはビューのコンテキストを共有していません。thisコールバックoptionsでは、ビューやコレクションではなく、渡すオブジェクトを参照します。

おそらくやりたいことはこれです:

initialize: function(){
    this.accCollection = this.options.accCollection;
    this.listenTo(this.accCollection, 'reset', this.render, this); 
    // Setting reset to true will trigger the reset event
    this.accCollection.fetch({ reset: true });
}
于 2013-12-04T16:47:25.990 に答える