在onClose处理程序中触发时,ItemView事件不起作用

时间:2014-02-07 15:30:13

标签: backbone.js marionette

我有一个Backbone Marionette CollectonView,它在子视图中监听事件如下:

    this.on(this, 'itemview:timeline:storyRemoved', this._storyRemoved);

itemview在onClose期间触发事件:

onClose: function () {
    this.trigger('timeline:storyRemoved', { model: this.model });
}

但是永远不会调用_storyRemoved函数。

如果我将触发器移动到onShow,那么它可以正常工作:

onShow: function () {
    this.trigger('timeline:storyRemoved', { model: this.model });
}

我猜这与视图已经关闭并因此不再在集合视图中的事实有关?

任何方式让这个工作?

2 个答案:

答案 0 :(得分:1)

你认为视图没有收听是正确的,因为它在你触发事件时已经被关闭了。

根据您正在做的事情,模型本身不应该触发此事件吗?这样,你可以在集合视图中添加这样的东西:

collectionEvents: {
  'remove': '_storyRemoved'
}

As you can see here,删除模型会触发删除事件,并引用已删除的模型。

答案 1 :(得分:1)

我喜欢gbsice的观点,我还想添加更一般的答案:如果您需要在onBeforeClose事件之前执行某些操作,则可以使用onClose而不是close

https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#onbeforeclose-callback

所以在你的情况下,它将是

onBeforeClose: function () {
  this.trigger('timeline:storyRemoved', { model: this.model });
}