在knockoutjs中使用选中的绑定时防止事件冒泡

时间:2013-01-14 15:07:20

标签: knockout.js

我正在使用KnockoutJs和Twitter Bootstrap构建UI。

我在名为checked的Bootstrap对话框中使用dropdown-toggle绑定。

<div class="btn-group">
    <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
        Facets
        <span class="caret"></span>
    </a>
    <ul class="dropdown-menu">
        <!-- ko foreach: facets -->
        <li>
            <input type="checkbox" data-bind="checked: Visible" /> 
            <span data-bind="text: Name"></span>
        </li>
        <!-- /ko -->
    </ul>
</div>

一切都很好,除了我希望下拉对话框在选中复选框时保持打开状态。

这是一个例子的小提琴:http://jsfiddle.net/MikeEast/L3KfG/2/

我尝试创建自己的绑定处理程序,它使用已检查的绑定与event.preventDefault()event.stopPropagation()一起显式打开对话框,但阻止复选框被检查。

任何指针?

1 个答案:

答案 0 :(得分:47)

听起来你走在正确的轨道上。你基本上想做相同的事情:

click: function() { return true; }, clickBubble: false

OR 这可以在自定义绑定中完成,如:

ko.bindingHandlers.stopBubble = {
  init: function(element) {
    ko.utils.registerEventHandler(element, "click", function(event) {
         event.cancelBubble = true;
         if (event.stopPropagation) {
            event.stopPropagation(); 
         }
    });
  }
};

KO附加的普通点击/事件处理程序将阻止默认操作,除非您返回true。但是,如果我们连接自己的事件处理程序,那么我们只需要阻止它冒泡。

示例:http://jsfiddle.net/MikeEast/PyNfg/1/