2012-02-22 11 views
1

"checked"バインディングを使用してラジオボタンリストにバインドする必要があるSelectedAttributeValueIdsというobservableArrayがあります。例えばKnockoutJSの "checked"バインディングがobservableArrayとラジオボタンリストで機能しない

<input type="radio" data-bind="checked: SelectedAttributeValueIds" /> 

しかし、KnockoutJSはobservableArrayを観測可能な単一の値に置き換えています。その代わりに、[123]の値を持つSelectedAttributeValueIdsのそれは「123」

になります私は、回避策として、これをしなかったが、もっと簡単な方法があればと思いまして:ラジオボタンの場合

<input type="radio" data-bind="event: { change: function() { $parent.SelectedAttributeValueIds([$data.ID()]); } }" /> 

答えて

2

、KOは、書き込む "値"が1つしかないと仮定します。チェックボックスの場合は、配列に値を追加/削除します。

常に1つの値を書きたいと思っていますが、唯一の要素として配列内にあるように思えます。

1つのオプションは、配列内の項目を表すko.computedを作成することです。別のオプションは、書き込み可能なko.computedを使用して入力に対してバインドし、必要な形式の間で値をブローカすることです。ような何か:

this.SelectedAttributeValueIds = ko.observableArray(); 
this.SelectedAttributeValueId = ko.computed({ 
    read: function() { 
     var values = this.SelectedAttributeValueIds(); 
     return values.length ? values[0] : []; 
    }, 
    write: function(newValue) { 
     this.SelectedAttributeValueIds([newValue]); 
    }, 
    owner: this 
}); 
+1

ここではHTML要素 – Ryan

+0

の属性がある「」=私はこれを試してみたが、私はそれが価値に格納されている値のthatsする必要がある場合、それはnewValueには、「true」または「false」渡しますあなたが再現しようとすることができるフィドル:http://jsfiddle.net/rniemeyer/LWeQ8/ –

+0

私は仕事で明日そのショットをあげるよ。私は、このように、この他を行うための別の方法があったhopeingた..しかし、私はないと思います:( – Ryan

関連する問題