2016-05-24 77 views
0

我試圖使用可見綁定來隱藏任何(存款)值= 0或null。我在嘗試嘗試錯誤時仍然失敗。以下是KO的一個片段。敲除可見綁定翻轉

<tbody data-bind="foreach: children"> 
<!-- ko with: propertyBag --> 
<tr data-bind="visible: $data.LLC_BI__Deposit__c_LLC_BI__Amount__c.value != null" style=""> 
<td data-bind="if: $data.LLC_BI__Deposit__c_LLC_BI__Account__c &amp;&amp; $data.LLC_BI__Deposit__c_LLC_BI__Account__c.value"> 
    <span data-bind="text: LLC_BI__Deposit__c_LLC_BI__Account__c.displayValue">   

的想法是,會列出5-6存款,但任何有0或空值應該被隱藏。在這種情況下,Visible是否是正確的綁定?如果是這樣,我會很感激任何提示。謝謝!

+0

您只是在測試的'null'不爲零... –

+1

請儘量確保它很容易(怡人)爲我們來幫助你,例如通過包含足夠的代碼來重現問題(例如,相應的視圖模型,一些基本的引導,語法上有效的和可運行的視圖代碼),但儘可能減少(例如用可讀的東西替換那些非常長的不可理解的屬性名稱)。 – Jeroen

回答

3

您有幾種顯示/隱藏元素的方法。

Visible就是其中之一。它會使元素顯示或隱藏(取決於您的條件),但底層html將保留在DOM中。

If binding是另一個,它創建或銷燬DOM元素,而不是簡單地隱藏它們。

正如一條評論指出的那樣,您的狀況是錯誤的,您只需測試null。您應該在viewModel中添加一個observable,它將包含顯示/隱藏元素的邏輯。這可以讓你測試這個屬性,就像你可能想要做的那樣。

看一看這個簡單的代碼片段:

function accountVM(amount) { 
 
    var _this = this; 
 

 
    _this.balance = ko.observable(amount); 
 

 
    _this.displayBalance = ko.computed(function() { 
 
    return _this.balance() != null && _this.balance() !== 0; 
 
    }, this); 
 

 
    _this.decrement = function() { 
 
    _this.balance(_this.balance() - 1); 
 
    }; 
 
}; 
 

 
function myVM() { 
 
    this.list = ko.observableArray([new accountVM(1), new accountVM(5), new accountVM(2), new accountVM(null)]); 
 
}; 
 

 
ko.applyBindings(new myVM());
div.element { 
 
    background-color: yellow; 
 
    text-align: center; 
 
    width: 100px; 
 
    cursor: pointer; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<div data-bind="foreach: list"> 
 
    <div class="element" data-bind="visible: displayBalance, text: balance, click: decrement" title="decrement"></div> 
 
</div>