我有一个嵌套的复合视图,用于检查其模型的集合,如果是,则将该集合设置为自身作为其集合。
onRender: ->
if model.attributes.has_collection
@collection = model.get 'myCollection'
当模型有一个集合,并且项目视图全部显示时,这很有效,当我向集合中添加一个新模型时,会出现一个新视图。
然而,当没有集合,并且单击按钮以创建新模型时,我需要创建模型,将集合(一个集合)设置为视图的模型,并获取视图以显示模型以及任何其他添加的模型。我尝试了各种各样的东西,现在我在模型上设置了集合,然后运行这个函数:
class List.myCompositeView
childView: myView
// *** //
setChildren: ->
@collection = @model.get 'myCollection'
@render()
第一个模型应该显示,但是不会显示创建的其他模型。要重复,它们会在onRender函数中设置集合时出现。我意识到有很多代码我没有在这里添加,所以如果有一些(可能)与你需要知道的问题有关,请告诉我。可能是视图没有正确绑定到集合的事件?谢谢!
答案 0 :(得分:0)
marionette collectionView有一个名为_initialEvents
的私有方法。构造collectionView时,它会设置此方法,以便在第一次呈现视图时调用。如果您的第一个渲染是在未设置集合视图的情况下,那么这将使事件无法正确连接。您应该能够在设置集合后调用此私有方法,并且所有内容都应该有效:@_initialEvents()
如果有用,这就是该方法的实现:
if (@collection) {
@listenTo(this.collection, 'add', @_onCollectionAdd);
@listenTo(this.collection, 'remove', @_onCollectionRemove);
@listenTo(this.collection, 'reset', @render);
if (@getOption('sort')) {
@listenTo(@collection, 'sort', @_sortViews);
}
}