2015-10-22 70 views
0

我在頁面中使用敲除來顯示其他元素。我想要一個div只有在用戶是管理員時纔有風格顯示。想要一個div根據真實的假條件可見

<div data-bind="display: !isCurrentUserAnAdmin" class="slidingDiv" style="display:none"> 

我在我的頁面中使用敲除來確定登錄的用戶是否是管理員。這可能使用div元素的數據綁定?

+1

也許偏離主題,但即使元素被隱藏,也可以通過dom檢查器輕鬆更改,以使其顯示。如果用戶不是管理員,我建議不要渲染元素。 – taxicala

+0

一旦滿足其他條件,該元素對管理員可見。謝謝 –

回答

1

兩個簡單的音符:在可見的結合

淘汰賽文檔

  1. ,如果你想通過淘汰賽visible結合控制元素的可見性,你應該不適用,可與任何干擾樣式,即你應該從你的div刪除style="display:none"

  2. 觀測值都必須是功能評估以獲得它們的價值。當您指定一個表達式時,會返回一個observable ko綁定,ko檢測它並自動解包該值。所以,這個綁定將起作用:visible: isCurrentUserAnAdmin,因爲isCurrentUserAnAdmin是可觀察的。但是,如果綁定表達式返回的東西不是可觀察的,則表達式按原樣計算。因此,當評估此綁定時:visible: !isCurrentUserAnAdmin,visible總是變成錯誤,因爲isCurrentUserAnAdmin返回function,這是一個truish值,即!被否定爲false時。因此,您必須手動提取包括括號的值,即visible: !isCurrentUserAnAdmin()。這是新用戶的最常見錯誤。 *注意:另一個典型的錯誤是訪問像這樣的可觀察值的子屬性:parent.childProperty,這是未定義的(可觀察的函數不包含childProperty)。在這種情況下,您可以使用parent().childProperty(返回自動解包的觀察值),或者使用直接提取可觀察值的parent().childProperty()

至於第二點,你可以在你的viewmodel中包含一個計算的observable,以避免在客戶端評估它。類似這樣的:

this.adminVisible = ko.computed(function() { return !isCurrentUserAnAdmin(); }, this); 

那麼你的綁定將是:visible: adminVisible。我更喜歡使用計算的可觀察對象,因爲它們不易出錯,更易於測試,並且綁定變得更乾淨。

1

theres no「display」binding,它是一個「可見的」綁定。所以像:

<div data-bind="visible: !isCurrentUserAnAdmin()" class="slidingDiv" style="display:none"> 

翻譯爲「這個div是可見的,如果!isCurrentUserAnAdmin()是真的

PS,在data-bind,如果你想要的isCurrentUserAnAdmin的價值,你需要把()如果一個可觀測http://knockoutjs.com/documentation/visible-binding.html