2

我正在为我的 SPA 应用程序使用 Durandal 和 Require。我也在使用 John Papa 的 HotTowel 模板。

对于我的模块,我需要根据请求创建其中的一些,而其中一些是单例的。

define([], function(){
    var bookId = ko.observable();
    var bookName = ko.observable();

    return {
        bookId: bookId,
        bookName: bookName
    };
}

上面的模块似乎为每个组合使用返回一个新实例,例如:

compose: {model: 'viewmodels/book'}

但是,如果我希望视图模型在所有组合中都相同怎么办。例如,我想要一个名为我的登录名的视图模型loginInfo,它将在很多地方使用,所以它不应该在每个组合上初始化,因为它是在第一次登录时在某个地方启动的。

compose: {model: 'viewmodels/loginInfo'}
4

1 回答 1

10

在 Durandal 中,如果视图模型返回一个对象

define(function(require) {
    return { a: 1, b: 2 }
});

Durandal 将持久化同一个对象。如果视图模型返回构造函数

define(function(require) {
    return Function() {
        this.a = 1;
        this.b = 2;
    }
});

Durandal 将通过调用构造函数创建一个新对象。

于 2013-10-05T19:37:40.123 回答