Durandal Compose:并不总是调用激活方法
Durandal Compose: activate method not always called
在 SPA 中,我有一个视图,其中包含另一个使用组合绑定的视图。这个子视图(子视图)有一个激活方法,在加载父视图时调用。
<div data-bind="compose: 'viewmodel/fol/index'"></div>
但是,当我离开父视图然后返回父视图(不刷新浏览器)时,不再调用子视图中的激活方法。如何在每次加载父视图时强制调用它?
由于您未在此处利用路由器,因此 child viewModel 的行为将不会遵守完整的激活生命周期。您可以采用两种方法:(a) 利用路由器或 (b) 手动激活 child。
如果您想采用第一种方法,您将在 viewModel 上创建一个 child 路由器并创建一个 router
绑定而不是 compose
绑定。在这种情况下,这可能有点矫枉过正,所以我将跳过它。
根据您在此处提供的信息,更好的方法是不要尝试自动挂接到激活生命周期。所以不要调用你的 activate()
函数激活,而是调用它 init()
:
function folIndexViewModel() {
this.init = function() {
...
};
}
在你的 parent 中,让你的激活函数调用 init
var child = require('viewmodel/fol/index');
function parentViewModel() {
this.activate = function() {
child.init();
}
}
请注意,此方法仅在您的 child 是单例时才有效。本文底部的更多信息:http://durandaljs.com/documentation/Creating-A-Module.html.
在 SPA 中,我有一个视图,其中包含另一个使用组合绑定的视图。这个子视图(子视图)有一个激活方法,在加载父视图时调用。
<div data-bind="compose: 'viewmodel/fol/index'"></div>
但是,当我离开父视图然后返回父视图(不刷新浏览器)时,不再调用子视图中的激活方法。如何在每次加载父视图时强制调用它?
由于您未在此处利用路由器,因此 child viewModel 的行为将不会遵守完整的激活生命周期。您可以采用两种方法:(a) 利用路由器或 (b) 手动激活 child。
如果您想采用第一种方法,您将在 viewModel 上创建一个 child 路由器并创建一个 router
绑定而不是 compose
绑定。在这种情况下,这可能有点矫枉过正,所以我将跳过它。
根据您在此处提供的信息,更好的方法是不要尝试自动挂接到激活生命周期。所以不要调用你的 activate()
函数激活,而是调用它 init()
:
function folIndexViewModel() {
this.init = function() {
...
};
}
在你的 parent 中,让你的激活函数调用 init
var child = require('viewmodel/fol/index');
function parentViewModel() {
this.activate = function() {
child.init();
}
}
请注意,此方法仅在您的 child 是单例时才有效。本文底部的更多信息:http://durandaljs.com/documentation/Creating-A-Module.html.