2015-04-17 30 views
0

我在頁面上有一條消息,指示用戶至少選擇五個項目。一旦用戶選擇了五個項目,我希望消息消失。如何使文本禁用或不可見在淘汰賽

<span class="message" data-bind="text: messageToChooseAtLeastFiveItems, disable: hasSelectedFiveItems"></span> 

裏面的視圖模型我已初步將值設置爲false,當用戶選擇五個項目的值更改爲true

self.hasSelectedFiveItems = ko.observable(false); 

gridUnredeemed.onSelectedRowsChanged.subscribe(function (e) { 
    var hasFiveRecalc = gridUnredeemed.getSelectedRows().length >= 5; 

    self.hasSelectedFiveItems(hasFiveRecalc); 
}); 

爲什麼span內的文本仍然出現?

的jsfiddle

http://jsfiddle.net/jkittell/x5xjncyp/

+0

嘗試使用可見像這樣http://jsfiddle.net/supercool/x5xjncyp/2/。歡呼聲 –

回答

2

你應該做這樣的

查看:

<select multiple="true" data-bind="options:array,selectedOptions:selected"></select> 
<span class="message" data-bind="text: messageToChooseAtLeastFiveItems, visible: hasSelectedFiveItems"></span> 
<button data-bind="click: chooseFive">Choose Five Now</button> 
<button data-bind="click: chooseLessThanFive">Choose Less Than Five</button> 

視圖模型:

function ViewModel() { 
    var self=this; 
    self.array=ko.observableArray([1,2,3,4,5,6,7]); 
    self.selected=ko.observableArray(); 
    self.messageToChooseAtLeastFiveItems = "Choose Five Foo"; 
    self.hasSelectedFiveItems = ko.observable(true); 
    self.chooseFive = function() { 
     self.hasSelectedFiveItems(false); 
    } 
    self.chooseLessThanFive = function() { 
     self.hasSelectedFiveItems(true); 
    } 
    self.selected.subscribe(function(data){ 
     console.log(data.length); 
     if(data.length >=5) { self.hasSelectedFiveItems(false);} 
     else 
     { self.hasSelectedFiveItems(true);} 
    }); 

} 

ko.applyBindings(new ViewModel()); 

與下拉工作樣本和按鈕here

樣品here只使用按鈕按你撥弄

使用如下公式計算(如毫米mendtioned),我們可以做這樣的檢查here最適合此particulara情況。

+1

你可能只想'self.hasSelectedFiveItems = ko.computed(function(){return this.selected()。length> = 5;},self);'而是,它有點乾淨。另外,在你的'chooseFive'演示函數中,你應該設置一些類似'self.selected([1,2,3,4,5,6])'來證明它正在工作,而不是通過設置final觀察到的。 – Milimetric

+0

@Milimetric我同意,它可以是一個觸摸清潔。我更喜歡用戶從列表中選擇,所以我沒有給出默認選擇和*不繞過邏輯*我不知道我是這樣做的。你能更精心製作嗎? –

+0

好的,這是我的建議作爲你的小提琴的更新:http://jsfiddle.net/x5xjncyp/4/。我的意思是繞過這個邏輯,'this.hasSelectedFiveItems'實際上只應該被設置爲對所選觀察值長度的反應。所以,如果你使用按鈕來表明你的反應是有效的,你應該執行*觸發*操作而不是*結果*更改。那有意義嗎?如果您同意,歡迎使用我的代碼更新您的答案。你做的工作,應該得到的信譽,我只是一個乾淨的怪胎:) – Milimetric