我正在使用激活器,我可以检测到新视图模型何时加载甚至激活,但如何检测其 html 对应项何时加载和显示?我只需要在旧 html(组合/嵌入页面)被新 html 替换后不久做一些事情。请注意,我对嵌入式 html 的更改感兴趣,而不是初始组合。
注意 2:我需要从父视图模型中检测到这一点 - 具有激活器的那个(加载的那个,而不是加载的那个)。
我正在使用激活器,我可以检测到新视图模型何时加载甚至激活,但如何检测其 html 对应项何时加载和显示?我只需要在旧 html(组合/嵌入页面)被新 html 替换后不久做一些事情。请注意,我对嵌入式 html 的更改感兴趣,而不是初始组合。
注意 2:我需要从父视图模型中检测到这一点 - 具有激活器的那个(加载的那个,而不是加载的那个)。
当组合引擎获取您的视图和对象,并使用绑定器将它们绑定在一起时,会在绑定发生之前和之后执行另外两个回调。binding(view) 在绑定之前调用, bindingComplete(view) 在之后立即调用。每次调用都会将视图传递给您的对象。
另一个答案不正确-
您需要使用附加的回调并将其公开给需要的模块。你可以这样做 -
function attached() {
console.log('View has been attached');
}
如果您想在此处触发事件以让订阅者(例如父视图模型)可以这样做 -
var callback;
function activate(callbackFunction) {
callback = callbackFunction;
}
function attached() {
callbackFunction();
}
这个新视图由传入的绑定组成。
define(['viewmodels/otherViewModel'], function (otherViewModel) {
function thisIsACallback () {
alert('Called back');
}
// Instantiate the other view model
function callOtherViewModel () {
var whatever = new otherViewModel(thisIsACallback);
}
});
并在视图中显示出来。
编辑
如果这不是您想要的,那么您可以随时查看 activeInstruction 或查看路由器是否仍在导航 -
var token = router.activeInstruction.subscribe(function() {
// Do whatever you want here
}
var token = router.isNavigating.subscribe(function() {
// Do whatever you want here
}
只需检查 API 文档以了解其他公开的方法
http://durandaljs.com/documentation/api/#module/router/class/Router