在Durandal的组合视图中激活功能

Nar*_*ois 1 durandal

我有这样的Shell html

<div data-bind="compose: { model: 'ui/user/viewmodels/header', view: 'infoveave/user/views/header'}"></div>
<div class="container-fluid page-host">
    <!--ko compose: {
        model: router.activeItem,
        afterCompose: router.afterCompose,
        transition:'entrance'
    }--><!--/ko-->
</div>
Run Code Online (Sandbox Code Playgroud)

和shell js一样

define(function(require) {
var router = require('durandal/plugins/router'),
    system = require('durandal/system'),
return {
    router: router,
    activate: function () {
        var self = this;
        router.mapAuto('ui/user/viewmodels');
        system.log('Sheel Activate Called');
        return router.activate('dashboard');
    }
};
});
Run Code Online (Sandbox Code Playgroud)

问题是标题上的激活函数没有被调用,但是仪表板上的那个被调用,我必须在标题中获取一些ajax内容并绑定它,我怎样才能实现这一点

我想保持这个逻辑分离,因为我不希望我的shell有这个逻辑

作为参考我的标题(为简化我已将我的复杂模型转换为一个简单的observable

define(function (require) {
var router = require('durandal/plugins/router'),
    system = require('durandal/system');

this.userInfo = ko.observable('');

return {
    router: router,
    activate: function () {
         system.log('Got Called Now');
         //do some ajax stuff here and update userinfo
    }
};
});
Run Code Online (Sandbox Code Playgroud)

标头html的最简单形式是

<span class="dropdown-notif" data-bind="text: userInfo"></span>
Run Code Online (Sandbox Code Playgroud)

Ale*_*ton 7

我认为你没有激活标题视图模型.

尝试将'activate:true'添加到标题视图compose绑定,如下所示:

<div data-bind="compose: { 
    model: 'ui/user/viewmodels/header', 
    view: 'infoveave/user/views/header', 
    activate: true}">
</div>
Run Code Online (Sandbox Code Playgroud)