Knockout.jsでチェックボックスのリストを作成しようとしています。リスト自体は、データにバインドされたソース、およびリスト内のどのアイテムが選択されているかから取得されます。私が持っているモデルは次のようになります。
var ViewModel = function ()
{
this.areas = [{AreaId: 1, Name: 'Test 1'}, {AreaId: 2, Name: 'Test 2'}, {AreaId: 3, Name: 'Test 3'}];
this.AreasImpacted = ko.observableArray([1, 2]);
};
次に、 Test 1、Test 2、およびTest3というラベルの付いたチェックボックスのリストを作成します。テスト1とテスト2をチェックしてもらいたい。私のHTMLは次のようになります。
<span class="areas" data-bind="foreach: areas">
<label><input type="checkbox" data-bind="value: AreaId, checked: $parent.AreasImpacted" /><span data-bind="text: Name"></span></label>
</span>
これにより、各チェックボックスが適切な名前で描画され、各チェックボックスのvalue
属性が正しく設定されていることを確認できますが、何もチェックされません。this.AreasImpacted
だけに設定してみました2
。そうすると、3つのチェックボックスがすべてオンになります。
完全に混乱しています!
アップデート:
モデルを次のように変更した場合:
this.AreasImpacted = ko.observableArray(['1', '2']);
その後、物事は期待どおりに機能します。
推測しなければならないのであれば、for-each
バインディングは各値を文字列に変換していると言えます。これが設計によるものなのか、Knockout.jsのバグなのか知りたいです。入力の値は数値であると期待します。これは、それをバインドしたものだからです。
提出されたバグ:
上記のコードは文書化されたとおりに機能しないため、GitHubにバグを報告しました。