Marionette:渲染后设置集合不会在模型添加时更新

Marionette: setting collection after render doesn't update on model add

我有一个嵌套的复合视图,用于检查其模型中的集合,如果是,则将该集合设置为其自身作为其集合。

onRender: ->
  if model.attributes.has_collection
    @collection = model.get 'myCollection'

当模型有一个集合并且项目视图全部显示时,这非常有效,当我将新模型添加到集合中时,会出现一个新视图。

但是当没有集合,点击按钮创建一个新模型时,我需要创建模型,将集合(一个集合)设置为视图的模型,并让视图显示模型和添加的任何其他模型。我尝试了各种方法,现在我在模型上设置集合,然后 运行 这个函数:

class List.myCompositeView
  childView: myView
  // *** //
  setChildren: ->
    @collection = @model.get 'myCollection'
    @render()

第一个模型会正常显示,但创建的更多模型不会显示。重复一下,当在 onRender 函数中设置集合时,它们确实会出现。我意识到有很多代码我没有在这里添加,所以如果有什么(可能)与您需要知道的问题相关,请告诉我。可能是视图没有正确绑定到集合的事件吗?谢谢!

A 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);
  }
}