Backbone - 一个模型的几个视图

时间:2012-12-08 08:55:28

标签: backbone.js

请你帮助我做最好的练习吗?

我有一个从服务器返回的对象列表。 所有都具有相同的属性。 某些属性的值并不总是相同的(例如,属性“isBig”可以是“true”/“false”)。 基于属性值的组合,应用程序决定是否在页面上绘制“bigBox”或“smallBox”。

页面视图应包含一个框集合。

我猜应该有一个“bigBox”视图和一个“smallBox”视图,对吗? 我也应该保留两个型号吗?它们完全一样(除了它们的价值......) 我可以从模型中选择视图吗?

请指导我?

感谢。

1 个答案:

答案 0 :(得分:2)

是的,我认为你走在正确的轨道上。您的数据完全相同,因此根据您希望如何显示该数据,您只有1个模型和单独的视图是有意义的

我建议:

  • 1型号(盒子)
  • 1 Collection(Boxes)
  • 3次观看(1“包含”视图集合(BoxesView),1个视图为bigBox(BigBoxView),1个视图为smallBox(SmallBoxView))

在BoxesView的渲染功能中,当您遍历集合时,请检查IsBig,并相应地渲染每个视图。

//render function of BoxesView. Make sure to have a reference to 
//your Boxes collection
render: function() {
   var that = this;
   this.collection.each(function(model) {
       //depending on the isBig property render a different view
       if(model.get("isBig") === true) 
           var bigView = new BigView({
               model: model
           });
           that.$el.append(bigView.render().el); 
           // $el is the element you want to append all your boxes into 
        else {
           var smallView = new SmallView({
               model: model
           });
           that.$el.append(smallView.render().el);
        }
   }
}

或者取决于bigBox和smallBox应该行为的相似程度(它们是否显示完全相同的信息并具有完全相同的动作),只有一个BoxView才有意义在构建视图时传递不同的模板。