2016-09-21 9 views
1

В настоящее время я использую Marionette 2.4.1.Какие события просмотра запускаются при удалении представления из региона?

В пределах зрения A, если я удалю вид B из области, принадлежащей виду A, какие события вызывают на вид B при опорожнении региона?

Я знаю, что вид B, onDestroy и onBeforeDestroy вызываются, однако мне интересно, какие события вызывают, если этот регион включает {preventDestroy: true}? Если я использую это, onDestroy и onBeforeDestroy не вызываются, но я не могу понять, какое событие вызвано в представлении B. Кажется, что их нет.

ответ

2

Предположим, что ваш LayoutView называется видом A, он имеет область. В этом регионе показан ItemView под названием B. Когда A опустеет область, события будут запущены на вид B (before:destroy и destroy) - это происходит независимо от того, был ли показан вид B в его области с preventDestroy: true или без.

preventDestroy: true используется, когда вы хотите показать один вид в регионе, а затем другой в том же регионе, не разрушая предыдущий вид. Таким образом, в этом примере:


  1. Показать вид B в регионе.
  2. Показать (без preventDestroy) новый вид (C) в том же регионе - приведет к разрушению вида B и уничтожению событий.

  1. Показать вид B в регионе.
  2. Показать (с использованием preventDestroy) новый вид (C) в том же регионе - будет не вызвать вид B, который будет уничтожен, поэтому никакие события уничтожения не будут уволены.

Редактировать

В первом случае эти события обстреливали просмотров:

::: 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 

N что в последнем случае просмотр B не запускает уничтожение событий, и никаких других событий не происходит.

+0

Правильно, есть ли какие-либо события, которые срабатывают при использовании preventDestroyed аналогично 'before: destroy'? Я не вижу их в исходном коде, поэтому, я думаю, они не существуют. – reid

+0

Правильно, я добавил редактирование в ответ. Никаких других событий на вид Б. – miphe

+0

Спасибо за ваш ответ :) – reid