Детская модель представления JavaScript Durandal

Я использую DurandalJS. Мое представление welcome.html имеет дочернее представление mymodule:

welcome.html:    
<div>
            <!--ko compose: {model:'viewmodels/mymodule', activate: true}-->
            <!--/ko-->
</div>

Как и ожидалось, функция activate вызывается в mymodule каждый раз, когда активируется представление welcome.html. Но когда welcome.html деактивируется (я перехожу к другому представлению), функции canDeactivate и devativate не вызываются в mymodule.js.

Как это можно исправить?


person user2290746    schedule 17.04.2013    source источник


Ответы (1)


Использование активации: true в привязке компоновки не управляет полным жизненным циклом вашей модели представления, при таком подходе будет вызываться только функция активации. (Как вы видите).

Чтобы получить все события жизненного цикла, вам нужно использовать активатор для управления жизненным циклом модели представления.

У вас есть несколько вариантов сделать это, смотрите документацию durandal по этому вопросу для получения дополнительной информации. http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks/ В частности, посмотрите раздел «Обратные вызовы активатора» на этой странице.

В основном это сводится к использованию маршрутизатора для активации ваших моделей просмотра или созданию активатора самостоятельно.

person Alexander Preston    schedule 17.04.2013
comment
я отредактировал ko compose в welcome.html для привязки к свойству в welcome.js, которое возвращает viewModel.activator(new mymodule()). Тем не менее функции canDeactivate и deactivate не вызываются в mymodule :( - person user2290746; 18.04.2013
comment
Не могли бы вы опубликовать немного больше кода, тогда я, вероятно, смогу сказать вам, как это исправить? В частности, welcome.js, а также достаточно, чтобы показать, как вы переходите к другому представлению? - person Alexander Preston; 18.04.2013