我正在开发一个拥有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().Welcome
,login().Welcome
或尝试register.Welcome
或login.Welcome
工作。
任何想法我怎样才能让它发挥作用?
答案 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>
我没有编写函数,而是编写了对象文字。这非常有效: - )