我正在开发一个应用程序,其中有两个面板 - 左侧和右侧面板。左侧面板是不同项目的列表,当单击其中任何一个项目时,右侧面板将显示有关该项目的信息。
右侧面板具有相同的视图,只有数据不同。
如何在Backbone中实现这一目标。目前,我正在为每个项目创建集合实例并将其传递给视图。但是所有实例都有相同的数据。
我是Backbone的新手,我自己也要解决这个问题。
答案 0 :(得分:0)
如果我正确理解了这个问题,你可以这样做。应该有3个对象,模型,LeftView和RightView。对于左侧面板中的每个项目,您可以实例化LeftView和Model。一旦点击任何LeftView,您就可以基于相同的模型实例化RightView。您可以为RightView使用相同的模型,因为LeftView也具有相同的数据。
答案 1 :(得分:0)
从你的说法来看,听起来你真的只想要一个集合实例,它将保存你所指的项目(集合中的模型实例)。
在这种情况下还应该有3个视图 - 一个用于List
(左侧面板),一个用于该列表中的单个ListItem
,另一个用于显示有关{{1}的信息本身(右图)。
Item
视图包含对集合的引用,并为集合中的每个项目添加List
视图。您稍后可能希望订阅集合上的事件,以便在从集合中添加/删除新项目时自动添加/删除列表中的项目。这是应该处理的视图。
ListItem
List = Backbone.View.extend({
el: '#list',
initialize: function(){
_.bindAll(this)
this.collection.each(this.appendItem)
},
appendItem: function(item) {
view = new ListItem({model: item})
$(this.el).append(view.render().el)
}
})
视图包含对特定模型的引用,并在列表中为该模型呈现列表项。它还处理click事件,该事件呈现该模型的ListItem
视图。
Item
ListItem = Backbone.View.extend({
tagName: 'li',
events: {
"click" : "showInfo"
},
initialize: function(){
_.bindAll(this)
},
render: function(){
$(this.el).html(renderTemplate("listItem", this.model))
return this
},
showInfo: function(){
view = new Item({model: this.model})
$('#item').html(view.render().el)
}
})
视图还包含对特定模型的引用,并呈现有关该模型的信息。这是您所指的右侧面板。
Item
Here is a fiddle展示实际行动。