gpt4 book ai didi

javascript - 为什么在定义后向 View 模型添加属性/方法?

转载 作者:行者123 更新时间:2023-11-30 17:20:00 26 4
gpt4 key购买 nike

我正在使用示例项目 (durandal541) 作为引用,向我的基于 durandal 的应用程序添加身份验证。在其中我注意到大多数页面的 View 模型中,程序员已经这样做了:

        // 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” View 模型而不是这样做有什么意义/好处,它们在定义时作为 View 模型的一部分包含在内?:

        // 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());
})
};

最佳答案

啊。现在我明白了。正如 Ryan Niemayer 在这段视频中 10:45 所解释的那样! http://vimeo.com/51103092

这个问题可能会被删除,但以防万一其他新手想知道 - 简单的答案是 ko.computeds 被评估立即(当然除非你添加延迟选项)并且这意味着如果在 View 模型本身中定义(根据我的第二个示例),在这种情况下任何引用“vm” View 模型的计算都将在启动时失败,因为那时 vm 根本不存在!因此,在第一个示例中的初始定义之后,将计算添加到定义的 View 模型对象中。

关于javascript - 为什么在定义后向 View 模型添加属性/方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25304166/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com