2017-06-19 50 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

這是我不完全瞭解的問題的一部分。也許如果您添加了更多描述或相關代碼塊,我可以更好地回答您的問題? –