2013-01-25 135 views
0

我正在與淘汰賽的一個小項目,我必須模擬答案的一些問題。 我動態地建立3個按鈕,當我點擊一個我比較它與正確的答案上的文字,如果它是正確的,它應該變成綠色..,如果它不正確,它應該變成紅色,正確的應該變成綠色.. 我試圖用結合淘汰賽的CSS屬性,但它似乎屬性不正確地刷新,即使所計算的關聯與CSS改變 的HTML:淘汰賽css動態綁定

<ul data-bind="foreach: chosenQuestionAnswers"> 
    <li> 
    <button data-bind="text: answerText, css: $root.answerStatus(), click: $root.selectButton"></button> 
    </li> 
</ul> 

柯部分:

selectedAnswer: ko.observable(), 
isAnswerCorrect: ko.observable(), 

selectButton: function (value) { my.AppViewModel.isAnswerCorrect(my.AppViewModel.checkIfCorrectAnswer(value.answerText)); 
}, 

checkIfCorrectAnswer: function (value) { 
return (value == my.AppViewModel.chosenQuestionCorrectAnswer()); 
    }, 

my.AppViewModel.answerStatus = ko.computed(function() { 
var exit = this.isAnswerCorrect() == true ? "highlightRight" : "highlightWrong"; 
console.log(this.isAnswerCorrect()); 
console.log(exit); 
return exit; 
}, my.AppViewModel); 

console.log顯示var的正確值出口,但按鈕的CSS不會改變......

任何想法,爲什麼?..

感謝....一

+0

你能把你的代碼放在jsfiddle中嗎? – akeeseth

+0

http://jsfiddle.net/mimi/7SbpE/2/ –

回答

0

CSS類是視圖的一部分,嘗試爲了使它們遠離ViewModel,它應該關注業務邏輯。

我會做類似

http://jsfiddle.net/hLXbq/

HTML

<button data-bind="css: { valid: valid, invalid: invalid }, click: toggle">Toggle</button> 

JS

ViewModel = function() { 
    this.valid = ko.observable(false); 
    this.invalid = ko.computed(function() { 
     return !this.valid(); 
    }, this); 
}; 
+0

我正在嘗試這個,http://jsfiddle.net/mimi/7SbpE/2/...你的修改在另一個例子中正常工作,但我不能使它在這一個工作.. .. –

+0

@ Ivan_nn2你有一個老KO參考,你使用的功能不可用在那一個。 –

+1

Chris是對的,css只能綁定到該版本中的對象字面值。不過,我仍然認爲它是一種很好的做法,可以將視圖依賴關係保留在ViewModel – Anders