无法在Durandal.JS中的主视图模型下获得多个视图模型

时间:2014-05-22 11:20:10

标签: durandal durandal-2.0

我正在开发一个拥有DurandalJS 2.0.1的应用程序。我编写了一个viewmodel,基本上我想实现一个具有多个viewmodel的主视图模型(例如,account viewmodel有register和login sub viewmodels)

define(['knockout'],function (ko) {

    var register = function(){
        var self = this;
        self.Welcome = "Register";
        self.Username = ko.observable();
        self.Password = ko.observable();

    }
    var login= function(){
        var self = this;
        self.Welcome = "Login";
        self.Username = ko.observable();
        self.Password = ko.observable();
    }   
    var account = {
        testVariable : "Hello Cruel World!",
        register : register,
        login : login
    };

    return account;

});

查看是:

<h2 data-bind="text: testVariable"></h2>
<h2 data-bind = "text: register().Welcome"></h2>
<h2 data-bind = "text: login().Welcome"></h2>

testVariable正在正确显示,但我无法register().Welcomelogin().Welcome或尝试register.Welcomelogin.Welcome工作。

任何想法我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

以下是解决这些问题的方法...... @ robert.westerlund是对的,如果这是函数,那么你就可以在继续之前创建每个函数的新对象..

define(['plugins/http', 'durandal/app', 'jquery', 'knockout'], function (http, app, $, ko) {



    var loginVM = {
        Welcome : "Hello Login",
        Username : ko.observable(),
        Password : ko.observable(),
        rememberMe : ko.observable(false),

        Login : function (obj, event) {
              //Do the login stuff
        }
    };

    var registerVM = {
        Welcome : "Hello Register",
        Username : ko.observable(),
        Password : ko.observable(),
        ConfirmPassword : ko.observable(),

        Register : function (obj, event) {
              //Do the register stuff
        }
};

    return {
        login : loginVM,
        register: registerVM
    };


});

查看

<div data-bind="with:login">
     <h2 data-bind = "text: Welcome"></h2>
</div>
<div data-bind="with:register">
     <h2 data-bind = "text: Welcome"></h2>
</div>

我没有编写函数,而是编写了对象文字。这非常有效: - )