Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js onclick事件更新模型属性,但视图不渲染_Backbone.js_Backbone Views - Fatal编程技术网

Backbone.js onclick事件更新模型属性,但视图不渲染

Backbone.js onclick事件更新模型属性,但视图不渲染,backbone.js,backbone-views,Backbone.js,Backbone Views,在我的主干中,我对每个模型进行了onclick事件,以更新名称。。那很好。此外,我在视图中获取触发器以更新模型的视图 但是视图没有更新模型。。而且文本在html中一点也不改变 我的模型视图: var studentView = Backbone.View.extend({ tagName:'li', events:{ 'click':"called" }, template:_.template($("#studentTemplate").html

在我的主干中,我对每个模型进行了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..
}
})

那么,我的代码有什么问题。。或者任何人在我的JSFIDLE中纠正我的错误

提前感谢。

这是我的作品:

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');
    }
});

当您单击studentView li时,您是否希望该学生的姓名更改为“text”?我是否正确阅读了您的问题?当模型的属性发生更改时,主干不会更新UI。您需要添加代码来跟踪
更改
事件并再次呈现UI,或者使用如下框架: