2012-01-16 46 views
8

我试图用基因敲除绑定一个点击一行在这样的表中的列:Knockoutjs - 表行单击绑定,要排除来自Click事件

<tr data-bind="click: $root.selectItem"> 

它的伟大工程。问题是,当我尝试排除某些列进行点击操作时。我在我的行中编辑和删除按钮,我不希望它们触发selectItem click事件。我是否只需要绑定所有td,我想以这种方式处理click事件,还是有更简单的方法来实现?

小提琴这里:http://jsfiddle.net/blankasaurus/WYKEM/

回答

20

更新:您避免自定义绑定加入clickBubble: false作为附加与click结合结合由凯文·Obee利用的建议,并在此示例中证明:http://jsfiddle.net/kevinobee/Q25ja/2/

原文:你可以使用包装click绑定的自定义绑定并防止发生其他事件。它可能看起来像:

ko.bindingHandlers.clickAndStop = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) { 
     var handler = ko.utils.unwrapObservable(valueAccessor()), 
      newValueAccessor = function() { 
       return function(data, event) { 
        handler.call(viewModel, data, event); 
        event.cancelBubble = true; 
        if (event.stopPropagation) event.stopPropagation(); 
       }; 
      }; 

     ko.bindingHandlers.click.init(element, newValueAccessor, allBindingsAccessor, viewModel, context);  
    } 
}; 

这里有一个例子:http://jsfiddle.net/rniemeyer/xj7Hs/

+2

+1的最佳解决方案! – 2012-01-17 01:00:18

+0

这是一个非常方便的解决方案。 – 2014-09-15 13:57:37