私はノックアウトJSを使用してシンクライアントに取り組んでおり、ラジオボタンに問題があり、ここの誰かがこれを引き起こしている可能性のあるものと、状況を修正するために何ができるかについての洞察を提供できることを望んでいます。
ラジオボタンの配列のかなり典型的なレイアウトがあります。
<p data-bind="text: background().description"></p>
<div data-bind="foreach: backgroundOptions" class="bg-options">
<p data-bind="text: description" class="color-swatch"></p>
<input type="radio" name="backgroundsGroup" data-bind="checked: $parent.backgroundId, value:id"/>
</div>
親オブジェクトのbackgroundIdにバインドしていることがわかります。
親オブジェクトと表示されているオブジェクトのJSは次のようになります。
var CardBackground = function(imagePath, swatchPath, id, description) {
var self = this;
var _imagePath = imagePath;
self.imagePath = ko.observable(_imagePath);
var _id = id;
self.id = ko.observable(_id);
var _description = description;
self.description = ko.observable(_description);
var _swatch = swatchPath;
self.swatchPath = ko.observable(_swatch);
};
var Card = function() {
var self = this;
getBackgrounds = function() {
var bgs = [
new CardBackground("noCardLarge.jpg", "card_swatch-blue.jpg", -1, "None Selected"),
new CardBackground("greenCard.jpg", "card_swatch-green.jpg", 10, "Green Contour Card"),
new CardBackground("purpleCard.jpg", "card_swatch-purple.jpg", 11, "Purple Contour Card"),
new CardBackground("redCard.jpg", "card_swatch-red.jpg", 12, "Red Contour Card"),
new CardBackground("whiteCard.jpg", "card_swatch-white.jpg", 13, "White Contour Card"),
new CardBackground("yellowCard.jpg", "card_swatch-yellow.jpg", 14, "Yellow Contour Card")
];
return bgs;
}
self.backgroundOptions = getBackgrounds();
var _defaultBackground = self.backgroundOptions[0];
self.defaultBackground = ko.observable(_defaultBackground);
var _background = self.defaultBackground();
self.background = ko.observable(_background);
self.backgroundId = ko.computed({
read: function() {
var values = self.backgroundOptions;
return values.length ? values[0] : [];
},
write: function(newValue) {
for (var i = 0; i < self.backgroundOptions.length; i++) {
if (self.backgroundOptions[i].id() == newValue) {
self.background(self.backgroundOptions[i]);
return;
}
}
},
owner: this
});
};
現在、バインディングが最初にアクションを実行するのに2回クリックする必要があり、その後、その時点から1回クリックするだけです。
さらに、デフォルト値が設定されていても、それぞれのオプションボックスは選択されていません。デフォルトの背景のインデックスを変更した場合、上記の説明は正しいですが、ラジオボタンは正しくありません。
この例を作成しました。
http://jsfiddle.net/JS2GV/2/
誰かが持っているかもしれないどんな洞察も大いにありがたいです。