2012-11-17 28 views
2

我有以下的HTML代碼段:爲什麼KnockoutJS將class屬性設置爲「0 1 2 3 4 5 startsWith」?

<table class="answerGrid" data-bind="foreach: rows"> 
    <tr data-bind="foreach: $data"> 
     <td> 
      <button data-bind="click : $root.onAnswerClick, css: isSelected" type="button"> 
       <div data-bind="html: $data.text" style="height: 100%"></div> 
      </button> 
     </td> 
    </tr> 
</table> 

我試圖做通過isSelected計算功能動態設置button元素的class屬性:

var Answer = function() { 
    var self = this; 

    self.id = ""; 
    self.text = ""; 
    self.selected = ko.observable(false); 

    self.isSelected = ko.computed(function() { 
     return self.selected() ? "selected-answer" : "answer"; 
    }, self); 
}; 

功能是作爲執行,並且我檢查了由於Answer尚未被選中而返回了文本「答案」。然而,當我看輸出HTML,它看起來像這樣:

<td> 
    <button data-bind="click : $root.onAnswerClick, css: isSelected" type="button" class="0 1 2 3 4 5 startsWith"> 
     <div data-bind="html: $data.text" style="height: 100%">4-7 days</div> 
    </button> 
</td> 

我完全糊塗了,爲什麼KO被設置class屬性設置爲「0 1 2 3 4 5 startsWith」。

任何人都可以幫助我嗎?

+0

你正在使用哪個KO版本?你可以在jsfiddle中複製你的問題嗎? – nemesv

+0

版本2.1.0。這裏是一個repor爲你:http://jsfiddle.net/j6Tta/ –

回答

2

我將使用不同的方法:

<button data-bind="css: { 'answer': !selected(), 'selected-answer': selected() }" type="button"> 
    <span>Testing</span> 
</button>​ 

所以我不會在所有使用的計算功能,而我會直接訪問的回答selected財產。我發現這個技術通過這個SO問題:

KnockoutJS css binding != true

+0

我認爲,這也可以通過新的淘汰賽2.2解決。 「現在,css綁定可以以編程方式將生成的CSS類名稱附加到元素(以前,它僅限於切換預定義的CSS類名稱)」:http://blog.stevensanderson.com/2012/10/29/knockout-2-2 -0-發佈/ –

+0

優秀。可能需要將我正在處理的項目更新到2.2。 –

相關問題