0

我有一个带有链接的剑道网格,我也将其设置为可选择的,这里的片段:

columns: [{
    field: 'link', title: 'Link',
    template: '<a href="${link}">Click Here</a>'
}],
...
selectable: 'row',
change: function(e) {
    var rowUid = this.select().data('uid');
    rowDs = this.dataSource.getByUid(rowUid);
    console.log('Went (1): ' + rowDs);
    return false;
}

当我单击外部链接<a>时,我也选择了该行。有什么办法可以抑制可选择的事件?

4

2 回答 2

5

您还可以通过为列指定 CSS 类来检测触发点击的元素。然后,您将在更改事件中放置一个 if 语句来检测是否单击了该列:

columns: [
  {
    title: ' ',
    command: {
      text: 'My Button',
        click: function (e) {
          e.preventDefault();

          //GET SELECTED DATA
          var data = this.dataItem($(e.currentTarget).closest('tr'));

          //DO SOMETHING
        }
      },
      attributes: {
        'class': 'actions'
      }
  }
]

然后在更改中,您将拥有以下内容:

change: function (e) {
  //GET TRIGGER SOURCE TO DETERMINE IF ACTION CLICKED
  var eventTarget = (event.target) ? $(event.target) : $(event.srcElement);
  var isAction = eventTarget.parent().hasClass('actions');

  //SELECT ITEM IF APPLICABLE
  if (!isAction) {
    var grid = e.sender;
    var dataItem = grid.dataItem(this.select());
    if (dataItem) {
      //DO SOMETHING
    }
  }
}
于 2012-12-06T16:55:23.467 回答
2

我刚刚偶然发现了一个 Kendo UI 开发人员的论坛帖子,上面写着“无法阻止网格的选择” (链接)。我想这意味着我将不得不解决这个问题。

编辑:我实际上只是想获取行的 uid 属性,以便可以从数据源中选择选定的数据项。我发现您可以在定义列模板时获取它,

columns: [{
    field: 'link', title: 'Link',
    template: '<a href="#" data-rowSpecificUid="${uid}">Manual Edit Link</a>'
}],

并使用它来检索选定行的数据项。

var selectedRow = $('#gridId').data('kendoGrid').dataSource.getByUid(rowUid);

将在一段时间内关闭这个问题,以防其他人可以提供帮助。

于 2012-10-05T03:26:10.517 回答