我怎样才能在一个viewModel变量可变的变量? (淘汰赛)
问题描述:
我怎样才能在一个viewModel变量可变的变量? (淘汰赛)
正如截图显示,有一个视图模型称为我的网页应用程序,它有一个名为“isShortlisted”变量,表示应用程序是否入围与否。它的声明如下:
self.applications = ko.observableArray(@Html.Json(Model.ApplicationCompatibilities.Select(o => o.JsonForm)) || []);
,我需要isShortlisted设置为可观察的,因为我希望我的按钮有这个条件
<form id="shortlistForm" data-bind="style: { display: application.isShortlisted === false ? 'inline-block' : 'none'}>
<form id="unshortlistForm" data-bind="style: { display: application.isShortlisted === true ? 'inline-block' : 'none'}>
(the form above shows up when "isShortlisted" is false and the one below shows when it's true(when clicked))
当“isShortlisted”值改变立即显示变化(和唯一可观测更新我试着做立即的变化)
是:
self.isShortlistedObservable = ko.observable(self.applications.application.isShortlisted);
并给我一个错误
Cannot read property 'isShortlisted' of undefined
总之,我可以做我该变量观察到,以便更新状态,每当值被改变? PLZ告诉我正确的语法
答
没有所有相关的代码块,很难给你一个正确的答案,但这里有一些提示可能会帮助你。
你的错误是告诉你self.applications.application
是未定义的。这是有道理的,因为self.applications是一个可观察的数组,所以你应该做的是这样的:self.applications()[0].application.isShortlisted
。
至于isShortlisted
可观察,您可以直接在self
上声明您的新observable,尽管我会建议您使用observable来装饰应用程序VM。像这样:
var vm = self.applications()[0].application;
vm.isShortlistedObservable = ko.observable(vm.isShortlisted);
至于到HTML结合,我建议你使用visible
结合,因为它会做的正是你想要用更少的代码是什么。请注意,我的假设下,我在你的模板中的KO上下文vm
如上图所示所以它应该是这样的:
<form id="shortlistForm" data-bind="visible: !isShortlisted()">
<form id="unshortlistForm" data-bind="visible: isShortlisted">
请记住,这将工作,只要你更新的可观察值,而不是只是原生的JS属性。
感谢您的回答。当我这样做时,我不会再犯错误,但我不明白它会如何工作。 “self.applications()[0] .application.isShortlisted”将返回第一个对象的“isShortlisted”。我该如何访问其他的?因为我假设通过将“isShortlisted”设置为true来使shortlistForm可见 – Dukakus17
这是我不完全了解的问题的一部分。也许如果您添加了更多描述或相关代码块,我可以更好地回答您的问题? –