Knockout点击绑定与javascript确认

前端之家收集整理的这篇文章主要介绍了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.

猜你在找的JavaScript相关文章