0

私のバックボーンでは、各モデルに onclick イベントを作成して、名前を更新しました..これは正常に動作します。また、モデルのビューを更新するために、ビューでトリガーを取得しています..

しかし、ビューはモデルを更新していません..そしてテキストはhtmlでまったく変更されていません..

私のモデルビュー:

var studentView = Backbone.View.extend({
    tagName:'li',
    events:{
        'click':"called"
    },
    template:_.template($("#studentTemplate").html()),
    render:function(){
        this.$el.append(this.template(this.model.toJSON()));
        this.model.get('scored') > 60 ? this.$el.addClass("active") : null;
        return this;
    },
    called:function(){
        this.model.set('name','text'); // i am setting a name as 'text' for example
    }
});

私のレンダービュー:

var studentsView = Backbone.View.extend({
el:$(".page"),
events:{
    "click #highScoreBtn":"showHighScore"
},
initialize:function(){
    this.collection = new collection(student);
    this.render();
    this.collection.on('change', this.renderOne,this);
},
render:function(){
    var that = this;
    _.each(this.collection.models, function(item){
        that.$el.find('ul').append(new studentView({model:item}).render().el);
    })

},
renderOne:function(data){
    this.$el.find('ul').append(new studentView({model:data}).render().el); // appending as new element instead updating the existing one..
}

}))

それで、私のコードの何が問題なのですか..または誰かが私のjsfiddleでこれを修正してください..

ここに私のjsfiddleリンクがあります

前もって感謝します..

4

1 に答える 1

1

これは私の作品です:

var studentView = Backbone.View.extend({
    tagName:'li',
    events:{
        'click':"called"
    },
    template:_.template($("#studentTemplate").html()),
    initialize:function(){
        this.listenTo(this.model, 'change', this.render);
    },
    render:function(){
        this.$el.html(this.template(this.model.toJSON()));
        this.model.get('scored') > 60 ? this.$el.addClass("active") : null;
        return this;
    },
    called:function(){
        this.model.set('name','text');
    }
});
于 2013-04-29T11:51:00.473 に答える