1

对此有很多问题,但我找不到任何适用于最新 durandal 版本(2.1.0)的答案。

我使用这个在我的页面内显示一个子视图模型:

<div data-bind="compose: { model: activeScreen, activationData: {id:selectedId}}"></div>

activeScreen是一个可观察的,我将这样的字符串传递给它:viewmodels/child

它起作用了,子视图模型被激活并显示在屏幕上。但是当我改变时activeScreen,我需要子视图模型来运行deactivate。可能吗?如何?

4

1 回答 1

3

只要您的子视图是实例模块而不是单例模块,您就可以将该代码移至detached处理程序。这也是我们所做的:我们所有的子视图都是通过动态组合来管理的,而不是子路由(这对企业风格的应用程序不起作用)。处理程序在路由deactivate上下文中发挥作用。

通过动态组合,我指的是通过可观察对象交换子视图/视图模型。

但是,再次,使这项工作的关键是子视图必须是实例模块。这样他们实际上会从内存中卸载。如果您使用单例,模块将永远不会分离(尽管有一些方法可以强制这种情况发生)。

于 2014-07-31T18:10:50.190 回答