jsFiddle の例
選択可能な項目がobservableArray
あります (テーブル内)。私がやろうとしているのは、テーブルの行をクリックしてモーダルを開き、モーダルにアイテムの詳細を入力し、アイテムの編集を許可してから変更を保存することです - 更新されたアイテムをobservableArray
. これまでのところ、他のすべてが機能していますが、配列アイテムを更新できないようです。
これまでのところ、私は試しました:
observableArray
すべてのアイテムを作るobservable
- 配列を使用
.replace
してアイテムを更新する-これは機能しますが、気分が悪いだけです - 更新されたアイテムをポストバックし、それをデータベースに適用し、配列を再バインドします - これは機能しますが、これは KnockoutJS のポイントを無効にしませんか?
私が達成しようとしていることを示す上記の jsFiddle リンクを提供しました。
モデルの表示と初期化
self.selectItem
私は現在 KnockoutJS の学習段階にあり、モック プロジェクトをいじって初期化する方法について自由に提案をしてください。
var items = [{
Id: 1,
Text: 'First item'
}, {
Id: 2,
Text: 'Second item'
}];
var viewModel = function (items) {
var self = this;
self.items = ko.observableArray(items);
self.selectedItemId = ko.observable();
self.item = ko.observable();
self.selectItem = function (item) {
for (var i = 0; i < self.items().length; i++) {
if (self.items()[i].Id === self.selectedItemId()) {
self.item(self.items()[i]);
break;
}
}
};
};
ko.applyBindings(new viewModel(items));
マークアップ バインディング
<select data-bind="options: items, optionsCaption: 'Select...', optionsText: 'Text', optionsValue: 'Id', value: selectedItemId, event: { change: selectItem }"></select>
<div data-bind="if: item">
<input type="text" data-bind="value: item().Text" />
</div>
<table>
<thead>
<tr>
<th>Text</th>
</tr>
</thead>
<tbody data-bind="foreach: items">
<tr>
<td data-bind="text: $data.Text"></td>
</tr>
</tbody>
</table>