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>