Knockout点击绑定与javascript确认

我不知道如何创建一个不执行valueAccessor的敲击点击绑定,除非 javascript确认对话框返回true.

这可能是这样的:

<a data-bind="confirmClick: { message: 'Are you sure?',click: someMethod }">Confirmable link</a>

在内部,confirmClick绑定将执行以下操作:

if (confirm(message)) {
   click();
}

我知道我可以通过将确认(…)代码放在我的身上来做到这一点
viewmodel,但这似乎不是适当的地方放这种代码.我也可以去做jQueryUI或Bootstrap这样的确认对话框,但是我想要一些可以放在任何项目中的东西.

我没有运气扫过互联网..我甚至看到了基因敲击的点击事件(https://github.com/knockout/knockout/blob/master/src/binding/defaultBindings/event.js)的源代码,但它看起来不友善…

任何帮助,将不胜感激!

解决方法

您需要创建您的自定义confirmClick binding handler,它将您的消息和您的点击处理程序包裹在一起,并绕过确认逻辑:
ko.bindingHandlers.confirmClick = {
    init: function(element,valueAccessor,allBindings,viewmodel) {
        var value = valueAccessor();
        var message = ko.unwrap(value.message);
        var click = value.click;
        ko.applyBindingsToNode(element,{ click: function () {
            if (confirm(message))
                return click.apply(this,Array.prototype.slice.apply(arguments));
        }},viewmodel);
    }
}

你可以像你这样描述:

<a data-bind="confirmClick: { message: 'Are you sure?',click: someMethod }">
    Confirmable link</a>

演示JSFiddle.

注意:如果要保留原始点击事件处理程序args并将其传递给您自己的点击事件处理程序,则只需要click.apply magic.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...