2013-07-09 34 views
0

我有一組複選框控制我的頁面上的一組項目的可見性。我正在嘗試添加一些功能,以便在沒有選中任何框時顯示所有項目。Knockout JS數據綁定不評估JavaScript表達

我想我的第一個問題是,我可以在我的data-bind中使用邏輯運算符嗎?從這裏的文檔(http://knockoutjs.com/documentation/binding-syntax.html),似乎我應該能夠。我試圖避免必須爲所有複選框創建一組額外的計算。如果這是可能的,我做錯了什麼?

<div data-bind="visible: (showStaff() || showAll())" class="procedure"> 

當我看在Chrome中KnockoutJS檢查員,看來好像只有「showStaff()」正被評估,表達的不其餘部分。因爲我知道showStaff()和showAP()都起作用了,所以我也嘗試了以下內容。它仍然只評估上半場。

<div data-bind="visible: (showStaff() || showAP())" class="procedure"> 

這裏是我的JS:

var self = this; 
self.showAP = ko.observable(true); 
self.showTR = ko.observable(true); 
self.showSR = ko.observable(true); 
self.showStaff = ko.observable(true); 
self.showNSW = ko.observable(true); 
self.showGA = ko.observable(true); 
self.showP14 = ko.observable(true); 
self.showSW = ko.observable(true); 
self.showAll = ko.computed(function() { 
    var show; 
    if (!self.showAP && !self.showTR && !self.showSR && !self.showStaff && !self.showNSW && !self.showGA && !self.showP14 && !self.showSW) { 
     showAll = true; 
     return show; 
    } 
    else { 
     showAll = false; 
     return show; 
    } 
}); 
+0

如果showStaff爲true; showAP將不會被評估。因爲真|| *某事*總是如此。 – Damien

+0

我不確定你需要多餘的父母http://jsfiddle.net/GcTCh/ – BillPull

回答

0

你在錯誤的方式與觀察到的工作。修改你的計算如下:

self.showAll = ko.computed(function() { 
    var show; 
    if (!self.showAP() && !self.showTR() && !self.showSR() && !self.showStaff() && !self.showNSW() && !self.showGA() && !self.showP14() && !self.showSW()) { 
     show = true; 
     return show; 
    } 
    else { 
     show = false; 
     return show; 
    } 
}); 
+0

這工作。謝謝! – Alaina

0

你應該添加()如果你想要一個observable的值。

self.showAll = ko.computed(function() { 
    var show; 
    if (!self.showAP() && !self.showTR() && !self.showSR() && !self.showStaff() && !self.showNSW() && !self.showGA() && !self.showP14() && !self.showSW()) { 
     showAll = true; 
     return show; 
    } 
    else { 
     showAll = false; 
     return show; 
    } 
});