从错误处理程序中获取对Kendo Grid的引用

Pat*_*iek 12 javascript asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc

已经有问题如何获得自定义错误处理和答案,但所有这些答案都使用"外部"引用/选择器来使其工作,例如:

function onError(e) {
    if (e.errors) {
        var message = "Error:\n";  

        var grid = $('#gridID').data('kendoGrid'); // <<- here
    (...)
}
Run Code Online (Sandbox Code Playgroud)

是否有可能从错误处理函数内部获取对网格的引用,而无需手动或"外部"提供选择器(因为全局变量是meh)?这样,错误处理脚本可以是完全独立的.

Pat*_*iek 15

版本'当前'截至2015-12-05

显然,现在可以通过检索源网格e.sender.table.context.id.谢谢,Akbari!

KendoUI 2014.1.318

以下解决方案不起作用.似乎table数据源中缺少成员.

我的解决方法很粗糙,只是使用选择器来获取所有k-grid返回非null的元素.data("kendoGrid")并将数据源与之进行比较arg.sender.当数据源匹配时 - 我们有一个网格引发了错误:

$(".k-grid").each(function() {
    var grid = $(this).data("kendoGrid");
    if (grid !== null && grid.dataSource == args.sender) {
        // We have a winner!
    }
});
Run Code Online (Sandbox Code Playgroud)

原始答案

事实证明 - 在浏览互联网之后相当多 - 这是可能的.所以在这里,对于任何在将来某个时间寻找答案的人来说,甚至可能是未来 - 我.

在函数内部,this不是绑定到网格,而是绑定到网格DataSource内部使用的网格,因此无法直接用于更改错误处理行为.需要一些记录不清的魔法.

这意味着(从Kendo UI MVC版本2013.3.1119.545开始)可以使用以下内容:

e.sender.options.table.context
Run Code Online (Sandbox Code Playgroud)

返回包装网格(DOM元素),同时

e.sender.options.table.context.id
Run Code Online (Sandbox Code Playgroud)

返回网格的ID.

这意味着,使用jQuery,可以通过以下方式检索网格:

var grid = $(e.sender.options.table.context).data("kendoGrid");
Run Code Online (Sandbox Code Playgroud)

其余的错误处理脚本保持完全相同.

从技术上讲,两者都this在范围内并且sender似乎是相同的东西 - 网格DataSource,所以在上面的例子中它们应该是可互换的.

  • **"警告"**应该是第一个.因为时间向前移动,而不是向后移动. (2认同)

小智 9

我建议将目标网格id作为参数传递给你的函数.示例:.Events(events => events.Error("function(args){telerikGridAraxErrorhandler(args,'myGridId');}"))

我认为如果他们在Telerik Grid的未来版本中进行任何更改,将会减少支持


Ata*_*hev 6

实际上,错误事件由数据源公开,并且不能轻易地获得哪个网格触发它.此外,我们应该记住,许多小部件可以共享一个数据源.

另一种可能的解决方案是使用绑定到窗口小部件名称的闭包:

function errorHandler(gridName) {
   return function(e) {
       // handle the event.
       var grid = $(gridName).data("kendoGrid");
   };
}

$("#grid").kendoGrid({
   dataSource: {
       error: errorHandler("#grid")
   }
});
Run Code Online (Sandbox Code Playgroud)