2012-09-11 51 views
0

是否可以创建一个视图,列出绑定到不同模型的集合?也可以使用排序功能?Backbone.js视图中的多个模型

例如我有'销售'和'账户'模型,并希望使用在这些部门工作的人员的所有姓名进行查看。

谢谢

回答

3

当然。你通常做的是最终使用在集合上应用事件监听器的组合,创建代表每个模型的小型子视图并通过它绑定模型事件处理程序。

BigView = Backbone.View.extend({ 
    el: 'ul', // This view is a <ul> and we'll be adding the model views 
    initialize: function() { 
     // This collection represents the collection you passed in 
     // For our purpose lets say it was a SalesCollection 
     this.collection.on('reset', this.addAllSales, this); 
     this.collection.on('add', this.addSale, this); 
    }, 
    addAllSales: function() { 
     var that = this; 
     this.collection.each(function(sale) { 
      that.addSale(sale); 
     }); 
    } 
    addSale: function(model) { 
     var view = new Subview({ 
      'model': model 
     }); 
     this.$el.append(view.render().el); 
    } 
}); 

SaleView = Backbone.View.extend({ 
    initialize: function() { 
     this.model.on('change', this.something, this); 
    }, 
    render: function() { 
     this.$el.html(); // Or whatever else you need to do to represent a sale as view 
     return this; 
    } 
    something: function(model) { 
     // Code for something 
    } 
}); 

所以在这个例子中,你基本上有你的主视图有一个集合(例如销售)。当销售收款重置时,它会启动addAllSales()。每次向集合中添加销售时,我们都会添加一个代表特定模型(销售模型)的子视图。在这个子视图中,我们将绑定事件处理为模型更改,然后执行某些操作。

+0

谢谢。我现在所拥有的东西与给出的代码类似,但是如何将“销售”模型中的记录添加到同一视图? – CodePorter

+0

你的意思是如何将由salesView表示的salesModel添加到拥有该集合的bigView中? – jmk2142

+0

我有两个模型,销售和帐户都有一个字段“名称”。我希望有一个列表视图,其中一列显示名称,第二列显示部门。对不起,如果问题不明确。 – CodePorter