2017-06-19 43 views
0

enter image description here我怎样才能在一个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告诉我正确的语法

回答

1

没有所有相关的代码块,很难给你一个正确的答案,但这里有一些提示可能会帮助你。

你的错误是告诉你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属性。

+0

感谢您的回答。当我这样做时,我不会再犯错误,但我不明白它会如何工作。 “self.applications()[0] .application.isShortlisted”将返回第一个对象的“isShortlisted”。我该如何访问其他的?因为我假设通过将“isShortlisted”设置为true来使shortlistForm可见 – Dukakus17

+0

这是我不完全了解的问题的一部分。也许如果您添加了更多描述或相关代码块,我可以更好地回答您的问题? –