Backbone.Marionette的CollectionView / CompositeView

2019-09-18 15:59发布

这个问题是这样的延伸相关的问题 。

以德里克的建议,我现在已经在正确的形状我的数据。 即我的集合Department对象,每个对象都具有集合Users

再下面德里克的意见,我想呈现CollectionViewCompositeView

我的集合视图看起来是这样的

class UserListView extends Backbone.Marionette.CollectionView
    itemView: UserCompositeView
    id: "user-list"  

    appendHtml: (collectionView, itemView, index) =>
      itemModel = @collection.at(index)
      itemView = new UserCompositeView
        model: itemModel 
        collection: itemModel.get("users")

      collectionView.$el.append itemView.el

和我Composite View看起来是这样的:

  class UserCompositeView extends Backbone.Marionette.CompositeView
    itemView: UserItemView
    itemViewContainer: '#users'

如果我不重写appendHtml方法,那么该视图渲染,但它只是呈现的性质Department模型。 它不会使users集合。

当我重写appendHtml的方法CollectionView这样我就可以通过一个模型( Department对象)和集合users ,但一个或两个人似乎是错误类型的对象,因为Marionette bindTo功能抱怨对象有没有“上”的方法。

我究竟做错了什么?

Answer 1:

什么是itemModel.get("users")返回?

如果此函数返回一个JavaScript数组或对象文字,这将是问题。 你必须通过一个有效的Backbone.Collection作为集合参数,而不仅仅是对象的数组。

collection: new Backbone.Collection(itemModel.get("users"))



Answer 2:

您也可以考虑使用骨干关系 ,这将让你定义有子模型或子集模型。



文章来源: Backbone.Marionette CollectionView/CompositeView rendering
标签: marionette