在我从这里的SO答案和许多BackBoneJs示例中选择的一个示例中,我看到initialize函数知道将使用哪个视图呈现模型。我不知道我现在有点偏颇,这是一个好的做法还是取决于正在开发的应用程序的类型。
http://jsfiddle.net/thomas/Yqk5A/
http://jsfiddle.net/Yqk5A/187/
FriendList = Backbone.Collection.extend({
initialize: function(){
this.bind("add", function( model ){
alert("hey");
view.render( model );
})
}
});
以上是良好做法还是以下
var friendslist = new FriendList;
var view = new FriendView({el: 'body'});
friendslist.bind("add", function( model ){
alert("hey" + model.get("name"));
view.render( model );
})
编辑的小提琴集合中的由视图呈现,我们还可以使用更多视图来呈现集合。
答案 0 :(得分:2)
我全都是为了使用活动, 我自己不想将绑定移到模型之外,我会像原始示例一样将它们保留在那里
var app = {};
app.evt = _.extend({}, Backbone.Events); // adding a global event aggregator
FriendList = Backbone.Collection.extend({
initialize: function(){
this.bind("add", function( model ){
alert("hey");
app.evt.trigger('addfriend', model);
})
}
});
//further in your code you can bind to that event
app.evt.bind("addfriend", function(model){
var view = new FriendView({el: 'body'});
view.render(model);
});
然而,我发现这个例子有点奇怪,创建一个新的视图,将body作为元素,并通过给渲染函数提供模型来渲染它。如果使用模型作为属性创建视图,然后将内容呈现到正文中,我会发现它更具逻辑性。但那是另一个主题。
简而言之,我移动创建外部视图,侦听正在触发的事件,但集合上的绑定仍保留在集合代码中。我发现将所有集合代码保存在同一个地方更容易管理。