不是在我的所有提交方法中放置非DRY try/catch
块,而是在我的视图模型上单击方法只是为了显示消息框并写入控制台,我想要一种交叉方式来做只是那个。
是否可以使用当前impl的包装版本覆盖click
和submit
绑定,该版本基本上用try/catch
包裹原始调用?
我试过了:
let defaultClickBindingHandler = (<any>ko.bindingHandlers).click;
(<any>ko.bindingHandlers).click = {
init(element, valueAccessor, allBindings, viewModel, bindingContext) {
try {
defaultClickBindingHandler.init(element, valueAccessor, allBindings, viewModel, bindingContext);
} catch (e) {
shell.error(e);
}
},
update(element, valueAccessor, allBindings, viewModel, bindingContext) {
try {
defaultClickBindingHandler.update(element, valueAccessor, allBindings, viewModel, bindingContext);
} catch (e) {
shell.error(e);
}
},
};
但是我在控制台中收到以下错误:
Unable to process binding "click: function (){return refresh }"
Message: input.replace is not a function;
View: [redacted];
ModuleId: [redacted]
答案 0 :(得分:1)
听起来像window.onerror
可能就是你所需要的。但是,如果您确定要包装绑定,则可以。请参阅this jsfiddle example,其中显示了如何包装click
绑定。
我无法确定为什么您的示例代码无法正常工作。我可以看到的一个问题是您正在尝试包装默认绑定的init
和update
函数。这不会起作用click
和submit
都只实现init
功能。它只对定义其中一个函数的绑定完全有效。例如,css
绑定仅实现update
函数。