セットアップ:
「foreach:$data.items」のテンプレートを使用してテーブルを表示するknockout.jsアプリケーションがあります。
$ dataは、次のようにデータバインドで設定されます。
<div data-bind="template: {name: 'table-custom', data: {table: 'item-list-custom', config: $root.items, default: {foo: '', bar: ''}}}"></div>
$ root.itemsは、次のようなdictの配列です。
[{foo: 'val2', bar: 'val2'}, ...]
JSONから$root.itemsの値を取得し、テンプレートに従ってテーブルを作成します。
問題:
テーブルに新しい列を追加したかったので、そのデフォルト値を「デフォルト」のdictに追加しました(例:baz:'')。新しい列は選択としてレンダリングされます(ドロップダウンリスト)。
これまではすべてOKです。私の問題は:
1)選択したオプションが利用可能な場合、その値を設定するにはどうすればよいですか?私は試した
<select data-bind="value: baz, ...
しかし、(JSONからの)既存の行にはまだbazキーが含まれていないため、不満があり、それを見つけることができません。
2)選択範囲で値を選択すると、既存の行について、モデルの残りの部分と一緒に保存されません。つまり、まだ「foo」キーと「bar」キーのみが含まれています。
テーブルに新しい行を追加してから値を選択すると、正常に機能し、baz値が他の値と一緒に保存されます。これは、「デフォルト」のbaz値が新しい行に適用されるが、既存の行には適用されないためだと思います。
では、新しい行の場合と同じように、このセットアップを既存のデータ(後でテーブルに追加したため、ロード時に「baz」プロパティがない)で機能させるにはどうすればよいですか?