【发布时间】:2014-08-14 09:04:49
【问题描述】:
在向我的基于 durandal 的应用程序添加身份验证时,我正在使用示例项目 (durandal541) 作为参考。在其中我注意到大多数页面的视图模型中,程序员都这样做了:
// Reveal the bindable properties and functions
var vm = {
activate: activate,
goBack: goBack,
title: 'manage',
session: session,
userName: ko.observable(),
logins: ko.observableArray(),
localLoginProvider: ko.observable(),
externalLoginProviders: ko.observableArray(),
message: ko.observable()
};
vm.hasLocalPassword = ko.computed(function () {
var logins = vm.logins();
for (var i = 0; i < logins.length; i++) {
if (logins[i].loginProvider() === vm.localLoginProvider()) {
return true;
}
}
return false;
});
vm.changePassword = ko.computed(function () {
if (!vm.hasLocalPassword()) {
return null;
}
return new ChangePasswordViewModel(vm, vm.userName());
});
...
将“hasLocalPassword”和“changePassword”添加到刚刚定义的“vm”视图模型而不是这样做,在定义时将它们作为视图模型的一部分包含在内,有什么意义/好处?:
// Reveal the bindable properties and functions
var vm = {
activate: activate,
goBack: goBack,
title: 'manage',
session: session,
userName: ko.observable(),
logins: ko.observableArray(),
localLoginProvider: ko.observable(),
externalLoginProviders: ko.observableArray(),
message: ko.observable(),
hasLocalPassword = ko.computed(function () {
var logins = vm.logins();
for (var i = 0; i < logins.length; i++) {
if (logins[i].loginProvider() === vm.localLoginProvider()) {
return true;
}
}
return false;
}),
changePassword = ko.computed(function () {
if (!vm.hasLocalPassword()) {
return null;
}
return new ChangePasswordViewModel(vm, vm.userName());
})
};
【问题讨论】:
标签: javascript viewmodel single-page-application durandal