3

次のようにフォーマットされた、サーバー経由で送信されたデータがあります。

[
  {"Username":"user1@domain.com", "id":1},
  {"Username":"user2@domain.com", "id":2},
  {"Username":"user3@domain.com", "id":3}
]

テーブルにバインドしますが、チェックボックスがオンになっているときに(選択されていることを示すために)テーブルの行にクラスを追加できるようにしたいのですが。これが最終的に機能するものです。問題は、Selected現在私のデータにあるプロパティではないことです。

<table>
    <tbody data-bind="foreach: Items">
        <tr data-bind="css:{selected: Selected}">
            <td>
                <input type='checkbox' data-bind="attr:{name: id}, checked: Selected" />
            </td>
            <td data-bind="text: Username"> </td>
        </tr>
    </tbody>
</table>​

の概念Selectedは純粋にUIのためのものであるため、サーバーにデータ内の各アイテムのネットワークを介して送信させるのは少し馬鹿げているようです。

私がしたいのは基本的にこれです:http://jsfiddle.net/xSSMX/ですが、各アイテムにobservableSelectedプロパティを追加する必要はありません。

これを実現するために、データ内の既存の各アイテムにプロパティを追加するにはどうすればよいですか?

4

2 に答える 2

1

マップを使用して、このようにサーバーから取得した配列にフィールドを追加できます...

data = data.map(function(item) {
            item.Selected = ko.observable(false);
            return item;
        });

これにより、各アイテムに選択済みが追加されます。私が間違っていなければ、マップはすべてのブラウザでサポートされているわけではないので、ここにあるような機能で実行できるサポートを追加する必要があります... http://www.tutorialspoint.com/javascript /array_map.htm。または、jQueryを使用して同じ効果を達成することもできます$.each

于 2012-08-30T00:46:03.437 に答える
0

サーバーがデータを送信するときに、を作成できますuserModel(id, userName)。このモデルはデフォルトでになりselectedますfalse。これをもう少し明確にするために、jsFiddleを含めました。

http://jsfiddle.net/xSSMX/1/

于 2012-08-29T23:46:29.500 に答える