<input type="text" data-bind="value: name" />
当为[name]键入值时按下“转义键”,它应该返回到之前的值。
值仍保持不变
jsfiddle here
答案 0 :(得分:2)
您希望将ctrl-z
密钥行为附加到escape
密钥,因为转义密钥不是为了撤消您的更改而构建的。
为了实现这一点,我们可以使用keydown
事件,因为keypress
不会检测转义键。
查看:强>
<input id="test" type="text" data-bind="value: name,event:{keydown :escKey}" />
<pre data-bind="text:ko.toJSON($data,null,2)"></pre>
<强>视图模型:强>
var model = function(){
var self=this;
self.name= ko.observable("smith");
self.escKey= function (data, event) {
if (event && event.keyCode == 27) {
$('#test').val(data.name());
}
return true;
}
};
ko.applyBindings(new model());
工作样本 here
或者,您可以使用biningHandlers
来实现类似的功能,但请将其作为最后的手段。
答案 1 :(得分:0)
非常感谢超酷:)
基于超酷的答案,我创建了一个自定义绑定处理程序来解决这个问题。嗯,它是相同的,但对我来说,如果你打算在bindingHandler中做你的viewmodel更清洁。
ko.bindingHandlers.cancelOnEscape = {
init: function (element, accessor) {
var _accessor = accessor();
$(element).keydown(function (event) {
if (event && event.keyCode == 27) {
$(element).val(_accessor());
}
return true;
});
}
};
这里是jsfiddle http://jsfiddle.net/6h1bbLm9/4/