我有一个名为layerPanel的视图正在使用screenData模型。现在在model.set上我从模型本身获得更新事件,但它不在视图上工作。
模型
var screenData = Backbone.Model.extend({
initialize : function() {
_.bindAll(this,"update");
this.bind('change:vdata', this.update);
},
update: function() {
var obj = this.vdata;
alert("update");
},
vdata:[{id : 0, title : "Welcome to Persieve 0"}]
});
查看
var layerPanel = Backbone.View.extend({
el: "#allLayers",
model: new screenData(),
initialize: function() {
this.render();
this.model.bind('change:vdata', this.render);
},
render: function() {
this.template = _.template(LayersTpl, {splitData: this.model.vdata});
this.$el.html(this.template);
return this;
}
});
以下是我在模型中设置值的方法。
screendata = new screenData;
var obj = screendata.vdata;
obj[obj.length] = {id : $(".bullet").length, title : "Welcome to Persieve"};
var tempData = [];
for ( var index=0; index<obj.length; index++ ) {
if ( obj[index]) {
tempData.push( obj );
}
}
obj = tempData;
screendata.set({vdata:[obj]});
答案 0 :(得分:4)
该事件应该开火。但是你的渲染不会起作用,因为'this'上下文需要设置。
尝试:
this.model.bind('change:vdata', this.render, this);
甚至更好,使用listenTo并隐式上下文(+你可以轻松清理this.remove())
编辑。从上面的编辑中,我可以看到您正在创建一个新的screendata实例。您创建的绑定适用于其他实例model: new screenData()
。
如果希望触发事件,则必须引用绑定对象并进行设置。
如果所有模型设置都在实际模型中进行。致电this.set({vdata:[obj]});