我有一个可以一次编辑的项目列表。编辑时,如果用户单击输入之外的任何地方,除了取消按钮,数据应该保存。
我有这个工作,但取消保存有一点延迟,因为在单击取消按钮之前注册了“模糊”事件。我想知道如何消除这种延迟(也许通过某种方式首先检测到取消),或者我是否应该按照当前脚本的方式重新设计。我愿意接受任何建议。
虚拟机代码:
function PersonViewModel(name) {
// Data
var self = this;
self.name = ko.observable(name);
self.editing = ko.observable(false);
self.oldName = ko.observable();
// Behaviors
self.edit = function() {
self.oldName(self.name());
self.editing(true)
}
self.save = function() {
self.editing(false)
}
self.cancel = function() {
self.name(self.oldName());
self.editing(false)
}
}
ko.bindingHandlers.selected = {
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var selected = ko.utils.unwrapObservable(valueAccessor());
if (selected) element.select();
}
};
ko.applyBindings(new PersonViewModel("Bert Bertington"));
看法:
<button data-bind="click: cancel">CANCEL</button>
<p>
Name:
<b data-bind="visible: !editing(), text: name, click: edit"> </b>
<input data-bind="visible: editing, value: name, hasfocus: editing, selected: editing, event: {blur: save}" />
</p>
<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p>
JSF中: