1

我正在使用激活器,我可以检测到新视图模型何时加载甚至激活,但如何检测其 html 对应项何时加载和显示?我只需要在旧 html(组合/嵌入页面)被新 html 替换后不久做一些事情。请注意,我对嵌入式 html 的更改感兴趣,而不是初始组合。

注意 2:我需要从父视图模型中检测到这一点 - 具有激活器的那个(加载的那个,而不是加载的那个)。

4

2 回答 2

0

您可以binding在视图模型中使用该事件

当组合引擎获取您的视图和对象,并使用绑定器将它们绑定在一起时,会在绑定发生之前和之后执行另外两个回调。binding(view) 在绑定之前调用, bindingComplete(view) 在之后立即调用。每次调用都会将视图传递给您的对象。

于 2013-11-12T00:38:23.523 回答
0

另一个答案不正确-

您需要使用附加的回调并将其公开给需要的模块。你可以这样做 -

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

于 2013-11-12T00:45:24.470 回答