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

时间:2012-01-16 20:46:00

标签: knockout.js

我正在尝试使用knockout将点击绑定到表格中的一行,如下所示:

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

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

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

1 个答案:

答案 0 :(得分:21)

更新:您可以通过添加clickBubble: false作为凯文Obee建议的click绑定的附加绑定来避免自定义绑定,并在此示例中进行了演示: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/