为什么click事件只针对此KoGrid模板中的第一个元素触发?

时间:2013-03-06 01:12:46

标签: knockout.js kogrid

我正在尝试将click事件处理程序绑定到KoGrid中的某些锚标记。但是,click事件仅附加到第一个锚标记。这不是语法错误,因为如果我切换标签的顺序,那么以前不工作的第二个链接就会开始工作。

这是jsfiddle:jsfiddle

<!-- Html -->
<div style="height: 300px; width: 500px" class="gridStyle" data-bind="koGrid: gridOptions"></div>

// Javascript
function viewModel() {
    var self = this;

    self.Events = ko.observableArray([
        { FirstName: "Jenny", LastName: "Jones" },
        { FirstName: "Henry", LastName: "Howe" }
    ]);

    self.gridOptions = {
        data: self.Events,
        columnDefs: [
            { field: 'FirstName' },
            { field: 'LastName' },
            { field: 'ActionField0', displayName: '&nbsp;',
             cellTemplate:
                 '<a href="#" data-bind="click: $userViewModel.save">Save</a> ' +
                 '<a href="#" data-bind="click: $userViewModel.edit">Edit</a>'         
            }
        ],
        autogenerateColumns: false,
        canSelectRows: false,
        showColumnMenu: false,
        multiSelect: false,
        enableColumnResize: false
    };

    self.edit = function() {
        alert("Edit");
    }

    self.save = function() {
        alert("Save");
    }
}

$(function () {
    var peopleViewModel = new viewModel();
    ko.applyBindings(peopleViewModel);
});

1 个答案:

答案 0 :(得分:2)

cellTemplate 需要有一个根级别元素。在您的情况下,您的celltemplate包含两个a,所以它只需要第一个。

为了使其工作(如果您不想创建两个单独的列),只需将两个锚点包装在div中:

cellTemplate:
    '<div>' +
    '<a href="#" data-bind="click: $userViewModel.save">Save</a> ' +
    '<a href="#" data-bind="click: $userViewModel.edit">Edit</a>' +
    '</div>'

演示JSFiddle