Marionette.js:为集合中的一个模型渲染不同的视图

时间:2013-06-04 12:20:36

标签: backbone.js marionette

我有一系列模特。 我想为该集合中的所有模型呈现相同的视图,除了视图应该是唯一的模型。

通常情况下,我会使用CollectionView为整个集合渲染相同的ItemView,但在我的情况下这不起作用。

我想到的选项是:

  1. 对所有模型使用相同的ItemView,但其中有一些逻辑可以为特定模型呈现不同的内容。
  2. 使用CompositeView获取没有唯一模型的集合,并将该唯一模型作为其模型。然后以一种方式渲染集合,并以其他方式渲染模型。
  3. 哪个选项更好?还有其他建议吗?

2 个答案:

答案 0 :(得分:2)

我有一个类似的用例,带有一组嵌套的集合。我正在使用CompositeView递归渲染树的所有节点,每个节点可能需要稍微不同的模板。通过使用getTemplate方法,我可以检查模型并使用几种不同模板中的一种。几乎是@David概述的内容,但这是一个例子:

getTemplate: function(){
  var template;
  switch (this.model.get('type')) {
    case 'film':
      template = 'film';
      break;
    case 'item':
      template = 'item';
      break;
    case 'year':
    case 'decade':
      template = 'node';
      break;
  }
  return template;
},

答案 1 :(得分:0)

我会考虑你的第二个想法:使用一个接收“特殊模型”和集合的复合视图。

但是,如果您有一个需要区别对待的模型,您可能需要重新考虑您的数据结构。这似乎是一个不寻常的设置,但也许有更好的方法来解决这个问题。