Knockout:在提交和单击绑定中捕获异常

Knockout: Catch exceptions in submit and click bindings

本文关键字:绑定 捕获异常 单击 提交 Knockout      更新时间:2023-09-26

与其在我的所有提交方法中放置非DRY try/catch块,并在视图模型上单击方法,只为了显示一个消息框并写入控制台,我希望用一种跨领域的方法来做到这一点。

是否可以用当前impl的包装版本覆盖clicksubmit绑定,该版本基本上用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]

听起来window.onerror可能就是您所需要的。但是,如果您确实决定要包装绑定,那么这是可能的。请参阅这个jsfiddle示例,它显示了如何包装click绑定。

我无法确定为什么您的示例代码不起作用。我可以看到的一个问题是,您试图包装默认绑定的initupdate函数。这不会起作用,因为clicksubmit都只实现init函数。绑定只定义其中一个函数是完全有效的。例如,css绑定仅实现update功能。