2014-12-02 2 views
1

Недавно я обновил код от ko 2.2.1 до 3.0.0 и испытал некоторую функциональность, один из которых связан с переключателями, которые работают с 2.2.1, но сломался в версии 3.0.0 ,Radio Button не работает с нокаутом 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

Это измененное изменение, поэтому вам нужно изменить старый код для работы с новой версией. Это означает, что вы не можете решить эту проблему без написания собственного проверочного обработчика привязки, который будет работать с обеими версиями. Но почему ваш код должен работать с 2.2.1, если вы все равно обновляетесь до 3.0? – nemesv

ответ

0

Проверенный связывания прекрасно работает в v.3.0.0, если его значение является строкой:

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

Вот обновление скрипку: http://jsfiddle.net/6mr5recs/6/

0

Обычно используется массив для сохранения параметров вашей радиогруппы. Если вы не хотите этого делать, вы можете сохранить его на вид в атрибуте value и установить его с помощью 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 содержит значение выбранного параметра.

Смежные вопросы