【发布时间】:2017-12-10 08:20:47
【问题描述】:
我正在尝试创建自定义绑定,以在 this link 示例之后的表格上使用 HTML5 编辑内容,但我无法使用 observableArray()。
表格正在视图中显示,foreach data-bindig 如下所示:
<tbody data-bind="foreach: customers">
<tr data-bind="attr: {id: $index}">
<td style="text-align: center;">
<span class="label label-primary" data-bind="html: Id"></span>
</td>
<td data-bind="html: Name, attr: {id: 'Nome'}, contentEditable: true"></td>
</tr>
</tbody>
视图模型是这样的:
函数 ViewModel() {
var self = this;
self.data = '@jsonList';
self.customers = ko.observableArray(JSON.parse(self.data));
self.editable = ko.observable(false);
for (i = 0; i < self.customers().length; i++) {
self.customers()[i]['Details'] = '/Anagrafica/Details/' + self.customers()[i]['Id'];
self.customers()[i]['Delete'] = '/Anagrafica/Delete/' + self.customers()[i]['Id'];
};
ko.bindingHandlers.htmlEdit= {
update: function (element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
}
};
ko.bindingHandlers.contentEditable = {
init: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.unwrap(valueAccessor()),
htmlEdit= allBindingsAccessor().htmlEdit;
$(element).on("input", function () {
if (ko.isWriteableObservable(htmlEdit)) {
htmlEdit(this.innerHTML);
}
});
},
update: function (element, valueAccessor) {
var value = ko.unwrap(valueAccessor());
element.contentEditable = value;
$(element).trigger("input");
}
};
};
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
目前我对代码本身感到困惑,因为我不明白如何将其设置为指向数组上的元素。
注意:数组已填充,显示内容没有问题。
编辑:在这里我添加了 JSFiddle https://jsfiddle.net/wxn34p45/ 以便更好地阅读代码
【问题讨论】:
标签: javascript arrays knockout.js