0

次のバックボーン スクリプトでは、ビュー クリック イベントでコレクションを変更しようとしました。

var StudentView = Backbone.View.extend({

    initialize: function() {
      console.log("create  student items view");
      this.collection.bind('add',this.render,this); 
              this.collection.bind('remove',this.render,this);
    },
    render : function(){


    },
    events :{
        "click ":"select_students"
    },
    select_students: function(){
        this.collection.reset([]);
        _.each(students.models, function(m) {
            if(m.get('name')=="Daniel"){
                this.collection.add(m);
            }
        });                         
    }

});

var students_view = new  StudentView({el:$("#student_table"),collection:selected_students});    

このエラーが発生しましたここに画像の説明を入力

コードで「this.collection」をどのように呼び出す必要がありますか?

4

3 に答える 3

0

アンダースコアの each() 関数を使用するのではなく、バックボーン コレクションを直接反復処理し、コンテキストを使用して「this」変数が参照するものを定義できます (以下の each の 2 番目の引数として渡されます)。

したがって、これを行う最善の方法は次のとおりです。

select_students: function(){
    this.collection.reset([]);
    students.each(function(m) {
        if(m.get('name')=="Daniel"){
            this.collection.add(m);
        }
    }, this);                         
}
于 2013-12-21T17:40:15.800 に答える
0

Backbone のコレクションフィルターメソッドを利用して、参照の使用をまったく避けることができます。

select_students: function () {
    this.collection.reset(students.filter(function (student) {
        return student.get('name') == 'Daniel';
    });
}
于 2013-12-21T18:31:09.017 に答える