Knockoutjs:如何检查自定义绑定中是否单击了另一个元素

时间:2018-06-22 05:26:18

标签: knockout.js

我向元素添加了自定义绑定,它的作用是不断检查是否单击了li标签,因此我在其中添加了onclick侦听器,但它确实起作用。怎么了,这是我的代码:

    ko.bindingHandlers.makeActive = {

    update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        // First get the latest data that we're bound to
        var value = valueAccessor();

        // Next, whether or not the supplied model property is observable, get its current value
        var valueUnwrapped = ko.unwrap(value);

        $(".friend a").click(function(){
            alert("The element was clicked.");
        });


    }
};

有没有一种方法可以检查元素是否已单击?

1 个答案:

答案 0 :(得分:2)

您将逻辑放错了一点。 不要在更新回调中设置点击侦听器,它会在每次附加到元素的可观察对象更新时尝试注册该事件。而是在初始化回调中注册侦听器,如下所示:

 ko.bindingHandlers.makeActive = {
     init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
         $(".friend a").on('click',function(){
            alert("The element was clicked.");
         });
     },
     update: function(element, valueAccessor, allBindings, viewModel, bindingContext) 
     {
     }
};

现在,您应该将此处理程序直接绑定到要观察的元素上,因此您不应在其中有选择器,而应该

 $(element).on('click',function(){
            alert("The element was clicked.");
        });

如果您对超过1个元素使用自定义绑定,这还将使您免于多次注册处理程序。现在,每个处理程序将只处理一个元素,而不是拥有一个选择器,该选择器可以在每次调用时一遍又一遍地解析相同的元素