关于此问题有很多问题,但我找不到任何适用于最新durandal版本(2.1.0)的答案。
我正在使用以下内容在我的页面中显示子视图模型:
<div data-bind="compose: { model: activeScreen, activationData: {id:selectedId}}"></div>
activeScreen
是一个可观察的,我传递了一个这样的字符串:viewmodels/child
它可以工作,并且子视图模型被激活并显示在屏幕上。但是当我更改activeScreen
时,我需要子视图模型来运行deactivate
。可能吗?怎么样?
答案 0 :(得分:3)
只要您的子视图是实例模块而不是单例模块,您就可以将该代码移动到detached
处理程序。这也是我们所做的:我们所有的子视图都是通过动态组合来管理的,而不是子路由(这对于企业级应用程序来说不起作用)。 deactivate
处理程序在路由的上下文中发挥作用。
通过动态组合我指的是通过一个可观察的方式交换进出子视图/ viewModel。
但是,再次,使这项工作的关键是子视图必须是实例模块。这样他们实际上就可以从内存中卸载了。如果你选择单身,那么模块永远不会脱离(虽然有办法强迫这种情况发生)。