从区域中删除视图时会触发哪些视图事件?

时间:2016-09-21 14:42:11

标签: javascript jquery backbone.js marionette

我目前正在使用Marionette 2.4.1。

在视图A中,如果我从属于视图A的区域中删除视图B,那么在清空该区域时视图B上会触发哪些事件?

我知道在视图B上,调用了onDestroyonBeforeDestroy但是我想知道如果该区域包含{preventDestroy: true}会触发哪些事件?如果我使用它,onDestroyonBeforeDestroy不会被调用,但我无法弄清楚在视图B上触发了什么事件。似乎没有。

1 个答案:

答案 0 :(得分:2)

假设你的LayoutView被称为视图A,它有一个区域。在该区域中显示了名为B的ItemView。当A清空它的区域时,将在视图B(before:destroydestroy)上触发事件 - 无论视图B是否显示在preventDestroy: true或不显示的区域中,都会发生这种情况。

如果要在区域中显示一个视图,然后在同一区域中显示另一个视图而不破坏上一个视图,则使用

preventDestroy: true。所以,在这个例子中:

  1. 在区域中显示视图B.
  2. 在同一地区显示(没有preventDestroy)新视图(C) - 将导致视图B被销毁并触发销毁事件。
    1. 在区域中显示视图B.
    2. 在同一地区显示(使用preventDestroy)新视图(C) not 会导致视图B被销毁,因此不会触发任何销毁事件。
    3. 修改

      在第一种情况下,会在视图上触发这些事件:

      ::: B :::  before:destroy
      ::: B :::  destroy
      ::: C :::  before:render
      ::: A :::  childview:before:render
      ::: C :::  render
      ::: A :::  childview:render
      ::: C :::  before:show
      ::: A :::  childview:before:show
      ::: C :::  before:attach
      ::: A :::  childview:before:attach
      ::: C :::  attach
      ::: A :::  childview:attach
      ::: C :::  dom:refresh
      ::: A :::  childview:dom:refresh
      ::: C :::  show
      ::: A :::  childview:show
      

      在第二种情况下,会在视图上触发这些事件:

      ::: C :::  before:render
      ::: A :::  childview:before:render
      ::: C :::  render
      ::: A :::  childview:render
      ::: C :::  before:show
      ::: A :::  childview:before:show
      ::: C :::  before:attach
      ::: A :::  childview:before:attach
      ::: C :::  attach
      ::: A :::  childview:attach
      ::: C :::  dom:refresh
      ::: A :::  childview:dom:refresh
      ::: C :::  show
      ::: A :::  childview:show
      

      请注意,在最后一种情况下,视图B不会触发销毁事件,也不会触发其他事件。