Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从错误处理程序内部获取对剑道网格的引用_Javascript_Asp.net Mvc_Kendo Ui_Kendo Grid_Kendo Asp.net Mvc - Fatal编程技术网

Javascript 从错误处理程序内部获取对剑道网格的引用

Javascript 从错误处理程序内部获取对剑道网格的引用,javascript,asp.net-mvc,kendo-ui,kendo-grid,kendo-asp.net-mvc,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 (...) } 函数onError(e){ 如果(如错误){ var message=“错误:\n”; var g

已经有了,但所有这些答案都使用了网格的“外部”引用/选择器,以使其工作,例如:

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

        var grid = $('#gridID').data('kendoGrid'); // <<- here
    (...)
}
函数onError(e){
如果(如错误){
var message=“错误:\n”;
var grid=$('#gridID').data('kendoGrid');//版本'current'截至2015-12-05
显然,现在可以通过
e.sender.table.context.id
检索源网格。谢谢

肯杜伊2014.1.318 下面的解决方案无效。数据源中似乎缺少
成员

我的解决方法相当粗糙,只需使用选择器获取所有
k-grid
元素,这些元素对于
.data(“kendoGrid”)
返回非空值,并将数据源与
arg.sender
进行比较。当数据源匹配时,我们有一个导致错误的网格:

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

原始答案 在浏览了相当长一段时间后,事实证明这是可能的。 因此,对于任何在未来某个时候寻找答案的人来说,也许是未来的我

在函数内部,
这个
并没有绑定到网格,而是绑定到网格内部使用的
数据源
,因此不能直接使用它来改变错误处理行为。需要一点缺乏文档的魔法

这意味着(自剑道UI MVC 2013.3.1119.545版起)可以使用以下内容:

e.sender.options.table.context
返回包装网格(DOM元素),而

返回网格的ID

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

var grid = $(e.sender.options.table.context).data("kendoGrid");
错误处理脚本的其余部分保持完全相同


从技术上讲,范围内的
这个
绑定和
发送方
似乎是同一件事-网格的
数据源
,因此在上面的示例中,它们应该是可互换的。

事实上,错误事件是由数据源暴露的,我们不容易得到哪个网格触发了它。我们还应该记住,一个数据源源代码可以由许多小部件共享

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

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

$("#grid").kendoGrid({
   dataSource: {
       error: errorHandler("#grid")
   }
});

我建议将目标网格id作为参数传递给函数。 例子: .Events(Events=>Events.Error(“函数(args){telerikGridAraxErrorhandler(args,'myGridId');}”))


我认为如果他们在Telerik Grid的未来版本中更改任何内容,这将导致支持减少

我知道这是旧版本,但它似乎过时了。我需要在错误中访问网格的名称,因为错误来自“内部网格”(来自主网格详细信息模板中的模板).这是从Telerik论坛上发来的,所以我不想因此而受到赞扬,但我花了一点时间才找到它,所以我在这里分享。 对于剃须刀助手

@Html.Kendo().Grid<Model>()
   .DataSource(dataSource => dataSource
    .Events(events => events.Error("function(e){error_handler(e, 'GridName')"}))
还有Javascript函数

Function error_handler(e, GridName)
{
}

您可以使用
Error()
event的重载方法,并将网格名称作为参数传递 比如:

javascript方法:

function error_handler(e, gridName) {

    $(gridName).data("kendoGrid").cancelChanges();

    if (e.errors) {
        var message = "Errors:\n";
        $.each(e.errors, function (key, value) {

            if ('errors' in value) {
                $.each(value.errors, function () {
                    message += this + "\n";
                });
            }
        });

        alert(message);
    }        
}

“警告”应该放在第一位。因为时间是向前移动的,而不是向后移动的。我应该补充一点,在当前版本中,从2017.2.504(可能更早)起,它可以通过
e.sender.table.context.id
访问
属性已从
数据源
中删除。可能是因为它可能由多个小部件共享。那么访问它的新方法是什么@MarcL?@TomelSafadi,很抱歉,在该评论之后不久我就没有使用剑道ui(切换项目).我看到我对Atanas Korchev的答案投了赞成票,这可能导致我当时找到了解决方案。
Function error_handler(e, GridName)
{
}
...
.Events(events => events.Error("function(e){error_handler(e, '#grid')}"))
function error_handler(e, gridName) {

    $(gridName).data("kendoGrid").cancelChanges();

    if (e.errors) {
        var message = "Errors:\n";
        $.each(e.errors, function (key, value) {

            if ('errors' in value) {
                $.each(value.errors, function () {
                    message += this + "\n";
                });
            }
        });

        alert(message);
    }        
}