現在、ブール値がラジオ ボタンにうまくマッピングされていないことを補うために、次のことを行っています。フィールドがオブザーバブルからどのように読み取られるかが原因で、(true と false ではなく) 1 と 0 を値にバインドすることに行き詰まっています。Pref1/Pref2 の値は、サーバーから true/false ブール値として取得されます。ここで重要なのは、ラジオ ボタンのチェックされた値をデータ バインドしてオブジェクトの true/false に一致させるだけでなく、true/false のブール値を GraduationClass オブジェクトに書き戻すことです。私の補償コードは醜いだけでなく、スケーラブルでもありません。
<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);
}