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

时间:2015-11-20 13:44:22

标签: backbone.js marionette composite-view

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

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

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

然而,当没有集合,并且单击按钮以创建新模型时,我需要创建模型,将集合(一个集合)设置为视图的模型,并获取视图以显示模型以及任何其他添加的模型。我尝试了各种各样的东西,现在我在模型上设置了集合,然后运行这个函数:

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

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

1 个答案:

答案 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);
  }
}