Knockoutjs - 表行单击"绑定",要从"单击事件"中排除列

Jas*_*son 8 knockout.js

我试图使用knockout将一个单击绑定到表中的行,如下所示:

<tr data-bind="click: $root.selectItem">
Run Code Online (Sandbox Code Playgroud)

它很棒.问题是当我尝试排除某些列进行点击操作时.我有编辑和删除行中的按钮,我不希望它们触发selectItem单击事件.我是否只需要绑定所有我希望以这种方式处理click事件的td,或者有更简单的方法吗?

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

RP *_*yer 21

更新:您可以通过添加clickBubble: false作为clickKevin 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);    
    }
};
Run Code Online (Sandbox Code Playgroud)

以下是一个示例:http://jsfiddle.net/rniemeyer/xj7Hs/