我正在创建一个自定义绑定,它将显示一个锚点,单击该锚点会变成一个文本框。一旦用户输入一个值并按下回车键,该值将被推送到传递给绑定的 observableArray 中。
大部分绑定取自 Ryan Niemeyers 示例 - 可在此处找到
html
<div data-bind="clickToEdit: { data: items, buttonText: 'New Item' }"></div>
捆绑
ko.bindingHandlers.clickToEdit = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var options = valueAccessor() || {};
var editing = ko.observable(false);
var newValue = ko.observable();
var button = $('<a class="btn btn-mini" href="#">' + options.buttonText + '</a>').prepend('<span class="icon-plus"></span>').appendTo(element)[0];
var input = $('<input type="text">').appendTo(element)[0];
ko.applyBindingsToNode(button, {
hidden: editing,
click: function () {
editing(true);
}
});
ko.applyBindingsToNode(input, {
value: newValue,
visible: editing,
hasFocus: editing,
//valueUpdate: 'afterkeydown',
onEnter: function(data) {
debugger;
options.data.push(data);
editing(false);
}
});
}
};
问题是在绑定到onEnter
绑定的函数中,数据参数始终未定义,因此新值永远不会被推入数组。
请参阅我的小提琴以获取完整示例