Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何将viewModel中的变量转换为可覆盖变量?(淘汰赛)_Jquery_Html_Ajax_Knockout.js - Fatal编程技术网

Jquery 如何将viewModel中的变量转换为可覆盖变量?(淘汰赛)

Jquery 如何将viewModel中的变量转换为可覆盖变量?(淘汰赛),jquery,html,ajax,knockout.js,Jquery,Html,Ajax,Knockout.js,如屏幕截图所示,在我的页面中有一个名为applications的viewModel,它有一个名为isShortlisted的变量,用于指示应用程序是否入围。声明如下: self.applications = ko.observableArray(@Html.Json(Model.ApplicationCompatibilities.Select(o => o.JsonForm)) || []); 我需要将isShortlisted设置为observable,因为我希望我的按钮具有此条件

如屏幕截图所示,在我的页面中有一个名为applications的viewModel,它有一个名为isShortlisted的变量,用于指示应用程序是否入围。声明如下:

self.applications = ko.observableArray(@Html.Json(Model.ApplicationCompatibilities.Select(o => o.JsonForm)) || []);
我需要将isShortlisted设置为observable,因为我希望我的按钮具有此条件

<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) )
给了我一个错误

Cannot read property 'isShortlisted' of undefined

总而言之,我可以让该变量可见,以便它在值更改时更新状态吗?请告诉我正确的语法

如果没有所有相关的代码块,很难给出正确的答案,但这里有一些提示可能会对您有所帮助

您的特定错误是告诉您self.applications.application未定义。这是有意义的,因为self.applications是一个可观察的数组,所以您应该执行以下操作:self.applications[0]。application.isShortlisted

至于ISShortListedObservable,您可以像以前一样直接在self上声明新的observable,尽管我建议您改为使用observable来装饰应用程序VM。像这样:

var vm = self.applications()[0].application;
vm.isShortlistedObservable = ko.observable(vm.isShortlisted);
关于HTML绑定,我建议您使用可视绑定,因为它可以用更少的代码实现您想要的功能。请注意,我假设模板中的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,这是你问题中我不完全理解的部分。也许如果你再多加一点描述或相关的代码块,我就能更好地回答你的问题了?
<form id="shortlistForm" data-bind="visible: !isShortlisted()">
<form id="unshortlistForm" data-bind="visible: isShortlisted">