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

时间:2015-10-30 17:22:47

标签: javascript knockout.js

不是在我的所有提交方法中放置非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]

1 个答案:

答案 0 :(得分:1)

听起来像window.onerror可能就是你所需要的。但是,如果您确定要包装绑定,则可以。请参阅this jsfiddle example,其中显示了如何包装click绑定。

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