我目前正在做下面的事情來補償布爾的沒有很好地映射到單選按鈕。由於字段是如何從observables中讀出的,我堅持將1和0綁定到值(而不是true和false)。 Pref1/Pref2的值來自服務器的true/false布爾值。這裏的關鍵是我不僅要將單選按鈕的選中值與數據綁定,以匹配對象中的真/假,而且還希望將true/false的布爾值寫回到GraduationClass對象中。我的補償代碼不僅醜陋,而且不可擴展。knockout.js布爾與單選按鈕的數據綁定問題
<input type="radio" value="1" name="radioGroup" data-bind="checked: Pref1" />Yes
<input type="radio" value="0" name="radioGroup" data-bind="checked: Pref2" />No
<a href="javascript:void(0);" data-bind="click: $root.saveGraduationClass ">Save</a>
function SiteSettingsViewModel() {
var self = this;
this.saveGraduationClass = function(graduationClass) {
// hack until i get a custom radio button binding
if (graduationClass.Pref1() == 1) {
graduationClass.Pref1(true);
} else {
graduationClass.Pref1(false);
}
if (graduationClass.Pref2() == 1) {
graduationClass.Pref2(true);
} else {
graduationClass.Pref2(false);
}
// ...ajax call to save graduationClass to the server
}
function GraduationClass(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
}
如果是「是/否」問題,將表單更改爲使用複選框而不是單選按鈕更容易嗎? – Niko
我想我可以,但理論上,我只想看看如何解決這個問題。 –
@AdamLevitt - 您可以編寫一個擴展器,將Pref1/2的值始終轉換爲布爾值。但是我同意Niko的看法,這與單選按鈕的工作原理沒有任何關係。 – madcapnmckay