2012-01-16 30 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

相關問題