单个视图的多个集合实例?

时间:2013-02-14 11:22:46

标签: javascript backbone.js collections models

我正在开发一个应用程序,其中有两个面板 - 左侧和右侧面板。左侧面板是不同项目的列表,当单击其中任何一个项目时,右侧面板将显示有关该项目的信息。

右侧面板具有相同的视图,只有数据不同。

如何在Backbone中实现这一目标。目前,我正在为每个项目创建集合实例并将其传递给视图。但是所有实例都有相同的数据。

我是Backbone的新手,我自己也要解决这个问题。

2 个答案:

答案 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展示实际行动。