2014-12-02 34 views
1

最近我將代碼從ko 2.2.1升級到3.0.0,並且遇到一些功能中斷,其中一個與單選按鈕有關,它與2.2.1一起工作但在3.0.0版本中打破。單選按鈕不兼容淘汰賽3

我已通過 http://knockoutjs.com/upgrade-notes/v3.0.0.html

了它說,現在的淘汰賽將有嚴格的檢查。 以前我們有像

<input type="radio" name="defaultlang" data-bind="attr:{value: 1},checked: 1"> 

一些件事上2.2.1正常工作現在淘汰賽最新的建議將其改爲

<input type="radio" name="defaultlang" data-bind="checkedValue: 1,checked: 1"> 

是有什麼其他辦法可以做到的變化?並希望與兩個ko版本兼容? 這裏是jsFiddle的相同。
http://jsfiddle.net/6mr5recs/

+4

這是一個突破性的改變,所以你必須改變你的舊代碼以使用新版本。這意味着如果不編寫自己的檢查綁定處理程序,就不能解決這個問題,這個處理程序可以在兩個版本中使用但是,如果你無論如何升級到3.0,爲什麼你的代碼需要使用2.2.1? – nemesv 2014-12-02 07:39:08

回答

0

選中的綁定工作,只是在v.3.0.0罰款,如果它的值是一個字符串:

<input type="radio" name="defaultlang" data-bind="attr:{value: 1},checked: '1'"> 

這裏是更新小提琴:http://jsfiddle.net/6mr5recs/6/

0

通常你會使用一個數組存儲您的收音機組的選項。如果你不想這樣做,你仍然可以將它存儲在值屬性的視圖中,並將其設置爲checkedValue: $element.value

我稍微修改了你的小提琴,因爲它沒有意義有一個quantity可觀察的電臺組,提供水果之間的選擇(不是金額),最重要的是有一個名字defaultLanguage

在任何情況下,這將是建立一個選項組的正確方法:http://jsfiddle.net/kevinvanlierde/6mr5recs/7/

代碼:

<div> 
    <input type="radio" name="defaultlang" value="fr" data-bind="checkedValue: $element.value, checked: selectedLang "/> 
    <span>FR</span> 
</div> 
<div> 
    <input type="radio" name="defaultLang" value="en" data-bind="checkedValue: $element.value, checked: selectedLang" /> 
    <span>EN</span> 
</div> 
<div> 
    <input type="radio" name="defaultlang" value="de" data-bind="checkedValue: $element.value, checked: selectedLang"/> 
    <span>DE</span> 
</div> 

其中selectedLang保持所選擇的選項的值。