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 属性を取得して、選択した dataItem を dataSource から選択できるようにしたいだけです。列テンプレートを定義しているときに取得できることがわかりました。

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

それを使用して、選択した行の dataItem を取得します。

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

他の誰かが助けてくれる場合に備えて、しばらくこの質問を閉じます。

于 2012-10-05T03:26:10.517 に答える