从durandaljs中的另一个viewmodel访问viewmodel正在创建一个新实例,而不是访问单例实例

时间:2016-06-30 08:56:19

标签: javascript requirejs single-page-application durandal

我的shell.html中有一个div元素,它使用compose绑定来加载视图和视图模型:

<div data-bind="compose: { model: 'viewmodels/subMenu' }"></div>

我的shell.js看起来像:

import common = require("helpers/common");

class Shell { 
    view: any; router: DurandalRootRouter; 
    activate: () => Q.Promise<any>; 
    constructor() { 
        var self = this; 
        self.view = common.view; 
        self.router = common.router; 
        common.router.map([ { route: '', title: 'Home', moduleId: 'viewmodels/Home', nav: true } ]);
        self.activate = () => { return Q.when(common.router.activate()); }
     } 
}

export = Shell

我的subMenu.js视图模型如下所示:

define([], function () {
    "use strict";
    return {
        isPreview: ko.observable(false)
    };
});

然后我有另一个视图模型,它使用requirejs导入这个subMenu视图模型并更改'isPreview'属性值。但是当它导入子菜单视图模型时,它会创建一个新实例而不是访问现有实例。基于durandal docs:http://durandaljs.com/documentation/Creating-A-Module.html

  

在上面的示例中,两个模块都返回了一个对象实例。这会产生通常被称为“单例”对象的东西,因为所有需要它的人都可以获得相同的对象实例。

我理解因为它返回一个对象因此应该是同一个实例而不是瞬态?

0 个答案:

没有答案