在骨骼中收集和查看
var studentmodel = Backbone.Model.extend();
var studentcollection = Backbone.Collection.extend({
model : studentmodel,
url : 'http://localhost/bb/data.JSON',
parse : function(response){
//console.log(response.data);
return response.data;
//return response;
},
});
var studentlistview = Backbone.View.extend({
tagName : "ul",
className : "studentlistul",
initialize : function(){
this.model.bind("reset", this.checkEvent,this);
this.model.bind("add", this.checkEvent,this);
},
checkEvent : function(){
$(this.el).html("");
_.each(this.model.models, function(student){
$(this.el).append(new studentListItemView({ model : student}).render2().el);
}, this);
$('#studentlistdiv').html($(this.el));
return this;
} });
并尝试将项目添加到此模型及其工作中,我的问题是内部渲染fn我怎样才能获得事件类型而this.model.bind(“add”,this.checkEvent,this)这个evt fire。在checkEvent中我如何获得事件类型,即哪一个触发添加或重置。这是我的问题,请帮助我
答案 0 :(得分:2)
Backbone事件处理程序没有可靠的方法来知道触发它的事件。而不是这样做:
this.model.bind("reset", this.checkEvent, this);
this.model.bind("add", this.checkEvent, this);
您应该为每个所需的操作设置单独的处理程序:
// A reset generally means that you want to redraw the whole thing.
this.model.bind("reset", this.render, this);
// If one model is added then you usually just want to render the
// the new one.
this.model.bind("add", this.render_one, this);
然后你的render
看起来会像这样:
this.$el.empty();
this.collection.each(this.render_one, this);
return this;
我在这里时还有一些额外的事情:
this.$el
中拥有this.el
的jQuery版本,因此无需$(this.el)
,只需使用this.$el
。collection
option的方式与处理model
的方式相同。因此,如果您new View({ collection: c })
,则视图将自动拥有this.collection
。如果您有一个集合,请使用collection
,如果您有模型,请使用model
;使用准确的名称不那么容易混淆。this.collection.each(...)
而不是_(this.collection.models, ...)
。