2013-10-18 36 views
1

我想顯示一個div取決於div的用戶數。如果div包含多於x個用戶,則在用戶上方顯示div如果不是則不顯示。我通過foreach循環顯示用戶。如果聲明和可見綁定在敲除不工作

查看:

<div class="collapse in" data-bind="template: { name: 'list', foreach: $data.Users }"> 

</div> 

<script type="text/html" id="list"> 
<!-- ko if: ShowLetter --> 
     <div id="letter" data-bind=" text: Letter"></div> 
<!-- /ko --> 
</script> 

我也試過這在我的觀點:

<div id="letter" data-bind="visible:ShowLetter, text: Letter"></div> 

但是當我渲染頁面要麼我沒有得到任何字母或字母將顯示爲一組用戶的小於x數。我的結果顯示,三組第一組只有1個用戶,不應該顯示字母 - 第二組有兩個用戶不應該顯示字母,第三組有30個用戶,並應顯示字母。

的Javascript:

var userViewModel = function (data) { 
     var _self = this; 
     _self.Name = ko.observable(data.Name); 
     _self.Letter = ko.observable(data.Letter); 
     _self.ShowLetter = ko.computed(function() { 
      return (roleViewModel.UserCount > properties.RoleUser); 
     }); 
    }; 

var typeViewModel = function (data) { 
     var _self = this; 
     _self.ContentType = ko.observable(data.ContentType); 
     _self.Name = ko.observable(data.Name); 
     _self.Rank = ko.observable(data.Rank); 
     _self.UserCount = ko.observable(data.UserCount); 
     _self.Users = ko.observableArray([]); 
    }; 

怎樣才能讓我的觀點爲每個組在foreach循環正常運行?

回答

0

由於財產ShowLetter是計算觀​​察到的,則必須調用它,否則你只是過客原型...

如。 將

或數據綁定=「可見:ShowLetter,文本:字母」 將數據綁定=「可見:ShowLetter(),文本:字母」

這應該照顧它。

+0

當我申請這個 - 沒有字母出現在它應該是。所以我的結果返回三個組,每個組包含一些用戶。可能ShowLetter()不是特定於每個組,因爲它應該是? – Masriyah

+0

這是不正確的,將導致您的模板失去其活動綁定。您可以使用原始的,可觀察的或可計算的觀察值,而不會在數據綁定中進行任何語法更改。 – AlexG

+0

實際上並沒有破壞綁定... dom元素仍然在變化上得到通知 – beauXjames

0

在你的計算中,你想調用roleViewModel.UserCount()(不確定RoleUser),因爲它是可觀察的。否則一切看起來很好,雖然一些代碼丟失。

+1

是...更多代碼==更好的repsonse ...展示你的綁定以及你如何設置所有東西...做一個jsfiddle嘲笑你的情況 – beauXjames

+0

這裏是一個jsFiddle我想要做什麼:http://jsfiddle.net/xNdJk/1/ – Masriyah

+0

@beauxjames我提供了一個jsfiddle,非常類似於我想要得到的:http:// jsfiddle。 net/xNdJk/1/ – Masriyah