我复制并修改了默认的 Knockout 提交绑定,以便为表单重置事件创建类似的绑定:
ko.bindingHandlers['reset'] = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
if (typeof valueAccessor() !== 'function')
throw new Error('The value for a reset binding must be a function');
ko.utils.registerEventHandler(element, 'reset', function (event) {
var handlerReturnValue;
var value = valueAccessor();
try {
handlerReturnValue = value.call(bindingContext['$data'], element);
} finally {
if (handlerReturnValue !== true) {
if (event.preventDefault)
event.preventDefault();
else
event.returnValue = false;
}
}
});
}
};
你会这样绑定:
<form data-bind="reset: onFormReset">
并将onFormReset
在您的视图模型上:
function ViewModel() {
this.onFormReset = function () {
//Your custom logic to notify or reset your specific fields.
return true;
}
}
在您的重置处理程序中,如果您返回 true,那么 JavaScript 将继续在表单上调用其重置函数。但是,如果您正在设置绑定到 value 的 observable,则实际上不需要让 JavaScript 继续重置表单。因此,从技术上讲,您可以不返回任何内容,或者在这种情况下返回 false。
其他人可以进一步扩展它以自动通知表单中所有绑定的 observables,但这符合我的目的。