2

有没有办法可以在 Marionette CollectionView 中创建一个独特的视图?我的意思是这样的:

集合视图

  • StartView(这是唯一的视图)
  • 常规项目视图
  • 常规项目视图
  • 常规项目视图
  • 等等

唯一,我的意思是“开始 ItemView”必须使用唯一的模板,并且没有与常规 ItemViews 关联的方法。

我尝试过的事情:

  • 仅将开始视图添加到 CollectionView 的 el 是不可取的,因为我的 CollectionView 的方法作用于它的子视图。

  • 在 Marionette 文档中,建议针对这种情况覆盖 buildItemView(我认为?)。我不确定如何覆盖它。只是调用 buildItemView 不起作用,因为 StartView 没有关联的模型或任何选项。好像我不能把这些参数排除在外,或者它只是返回未定义。

  • 我不能在我的 CollectionView 模板中包含 StartView 的标记,因为... Marionette CollectionViews 不能有模板。

  • 从 Marionette 文档来看,这似乎不适合 CompositeView 的用例。但也许我错了。

我可能遗漏了一些相当明显的东西。在此先感谢您的帮助。

编辑:格式化

4

2 回答 2

5

创建 2 个不同的视图,“StartView”和“NormalView”:

StartView = Marionette.ItemView.extend({
    template:"#start-template'
});
NormalView = Marionette.ItemView.extend({
    template:"#normal-template"
});

In your collection view, override getItemView and return your 'StartView' and 'NormalView'... something like this:

MyCollectionView = Marionette.CollectionView.extend({
   getItemView:function(item){
       if(item.get("ImTheFirst")===true)
          return StartView;
        else
          return NormalView;
    }
});

On the first item in your collection, add a property 'ImTheFirst' (for example) and set it to true.

于 2013-04-01T19:43:51.200 回答
2

What you are looking for here is a CompositeView. A CompositeView is a mash-up between an ItemView and a CollectionView. Essentially, the CompositeView itself would act as your StartView, and then you define an ItemView to act as your "Regular ItemView"'s.
Something like this:

RegularItemView = Backbone.Marionette.ItemView.extend({
  template: "#regular-itemview-template"
});

CompositeView = Backbone.Marionette.CompositeView.extend({
  itemView: RegularItemView,
  template: "#start-template"
});
于 2013-04-02T19:19:51.903 回答