2016-07-29 9 views
0

すべてのオプションを選択および選択解除し、選択した値をノックアウト配列に保存できるチェックボックスリストがあります。ノックアウトを使用してチェックボックスを更新し、選択した値を保存

は、ここに私のHTML

<a><span data-bind="click: selectAllUsers">SELECT ALL</span></a> 
<a><span data-bind="click: deselectAllUsers">DESELECT ALL</span></a> 
<ul data-bind="foreach: users"> 
     <li> 
      <input type="checkbox" data-bind="checked: $parent.selectedUsers" /> 
      <span data-bind="text: name"></span> 
     </li> 
</ul> 

だとここに私のjavascriptのセクションです:

var userData = //populated earlier 
self.users = ko.observableArray([]); 
self.selectedUsers = ko.observableArray([]); 
self.selectAllUsers = function() { 
    self.selectedUsers(userData) 
} 

self.deselectAllUsers = function() { 
    self.selectedUsers([]); 
} 

ビューモデルが初期化され、ユーザーとselectedUsersとの両方が中に保存されているユーザオブジェクトの配列に初期化userData。現在のところ、チェックボックスは自動的にはチェックされません。チェックボックスをオンまたはオフにすると、チェックボックスのすべてのオプションに影響します。理想的には、選択されたチェックボックスを変更して、選択されたユーザを更新するだけです。

答えて

0

value属性のチェックボックスがない場合は、対応する値にcheckedValueバインディングを割り当てる必要があります。あなたの場合:ありがとう@f_martiznez

<input type="checkbox" data-bind="checked: $parent.selectedUsers, checkedValue: $data" /> 

https://jsfiddle.net/xrxskyx8/1/

+0

! checkedValue:$ dataが問題でした。私はまだSELECT ALLがDESELECT ALLを選択した後にヒットし、いくつかの他のオプションが除外されたり、含まれていたりすると、SELECT ALLボタンが実際にすべてを選択しないという小さな問題があります。申し訳ありませんが、それは本当に意味をなさない場合。 select allのすべてのユーザーに対して、チェックボックスが更新されていないようです。 – manufan22122

+0

@ manufan22122、私はあなたの問題を調査しました。複数の観測可能な配列を同じ配列変数*で初期化しようとしたようです。それは不正確なアプローチです。 'userData.slice(0)'を使用して配列のコピーを作成します(内部のオブジェクトは元のままです)。更新されたフィドルを見てください:https://jsfiddle.net/xrxskyx8/2/ –

+0

ありがとう!私はノックアウトには比較的新しいので、私はそれを考えていたことはありません。ヘルプマンに感謝 – manufan22122

関連する問題