Backbone和Marionette约定,用于表示作为对象和集合的项目视图

时间:2013-07-16 03:13:25

标签: backbone.js marionette

所以我有一个看起来像这样的对象

{
  first_name: 'Matt',
  last_name: 'Damon',
  movies: [{name: 'mov_name1', director: 'Sven'}, {name:'mov_name2', director: 'Joe'}]
}

有一个端点将返回此信息,我将使用fetch获取此数据并将其放入模型或ItemView中。 (我必须使用fetch因为我真的想要这些对象的集合,所以我将在集合上调用fetch。)但是,对象的表示不应该只是一个模型,它应该是一个模型(或ItemView) ,movies属性应该是一个集合,因为当我显示该对象的行时,它应该是一个带有模型和集合的CompositeView。我的问题是如何在模型上调用fetch之后将此对象表示转换为模型和集合?

对不起,解释一下有点令人困惑......

2 个答案:

答案 0 :(得分:2)

对您的集合进行提取,然后为每个元素创建一个模型和一个集合,然后将其传递给compositeView

类似这样的事情

  mycollection = new MyCollection();
  mycollection.fetch();
  mycollection.each(function(item){
      var actorModel = new ActorModel({firstName : item.get('first_name'),
                               lastname: item.get('last_name')});
      var moviesCollection = new MoviesCollection(item.get('movies'));
      var xCompositeView = new XCompositeView({model:xmodel,
                                               collection:moviesCollection});
  });

这样你的Compositeview获得了一个模型和一个集合,你可以使用每个电影的itemView正确渲染它们。

希望这会有所帮助。

答案 1 :(得分:0)

如果使用另一个框架不是问题,那么有一个称为骨干关系。它旨在处理模型之间的关系。请参阅Backbone-Relational

中的动物园示例

在示例中,有一个Zoo模型,模型有一个动物集合,由动物模型组成。通过Zoo模型上的单个提取,您将动物集合作为Backbone集合而不是普通对象数组。