如何在Kendo事件处理程序中传递事件对象和自定义参数?

问题描述 投票:0回答:1

我可以将javascript函数绑定到没有参数的事件,并使用以下方法接收事件对象:

columns.Command(command => command.Custom("Edit").Click("editDetails")).Width(1);

然后editDetails看起来像:

function editDetails(e)
{
 e.preventDefault();
 //code goes here
}

这很好,如果我不需要任何参数,我得到事件对象e,如果有必要我可以使用。

如果我使用这样的匿名函数,我也可以传入参数:

.Events(e => e.DataBound("function() { onGridDataBound('#MyGrid') }"))

onGridDataBound看起来像这样:

function onGridDataBound(gridId)
{
 //code goes here
}

我无法弄清楚的是如何传递参数并仍然接收事件对象。

例如,如何修改Events语句以便它同时发送gridId和event对象?

这样我可以做类似的事情:

function onGridDataBound(e, gridID)
{
    e.preventDefault();
    var dataItem = this.dataItem($(e.currentTarget).closest('tr'));
    var grid = $(gridID).data('kendoGrid');
}
javascript asp.net-mvc kendo-ui kendo-asp.net-mvc
1个回答
0
投票

你可以尝试一个匿名函数来调用你的事件处理程序。

<div id="grid"></div>
<script>
$("#grid").kendoGrid({
  columns: [
    { field: "name" },
    { command: [{
        name: "Details",
        click: function(e) {
            // prevent page scroll position change
            e.preventDefault();
            detailClick(e, this, "Detail Clicked")
        }
      }]
   }
  ],
  dataSource: [ { id:1, name: "Jane Doe" },
                { id:2, name: "John Doe" },]
});

  function detailClick(e, grid, msg){
        // e.target is the DOM element representing the button
      var tr = $(e.target).closest("tr"); // get the current table row (tr)
      // get the data bound to the current table row
      var data = grid.dataItem(tr);
      console.log("Details for: "+ data.id+" "+ data.name);
      console.log(msg);
  }
</script>
© www.soinside.com 2019 - 2024. All rights reserved.