是否有事件表明已呈现剑道网格?

时间:2014-09-08 18:21:13

标签: kendo-ui kendo-grid

我想在渲染(显示/隐藏列等)后对Kendo网格进行一些更改。但是,Kendo网格不提供任何onRendered事件。那我怎么能这样做呢?

之前,我使用dataBound事件来执行此操作。它过去常常工作,因为数据从AJAX请求到达时已经呈现了网格。但是,我的用例已更改 - 声明网格时数据现已可用。所以dataBound事件中的代码没有找到网格。在下面的代码中if (grid)始终返回false:

$('#mygrid').kendoGrid({

    dataSource: {
        data: myGridData
    },

    dataBound: function() {
        // Check if the grid has been rendered
        var grid = $('#mygrid').data('kendoGrid');
        if (grid) {
            // Show/hide columns
            ...
        }
    },

    ...
});

我还尝试在kendoGrid()调用之后移动检查,但仍然无效。电话结束后网格尚未正确呈现。

$('#mygrid').kendoGrid({

    dataSource: {
        data: myGridData
    },

    ...
});

// Check if the grid has been rendered
var grid = $('#mygrid').data('kendoGrid');
if (grid) {
    // Show/hide columns
    ...
}

我可以在做检查之前使用setTimeout(),但这感觉就像一个黑客!还有其他方法吗? Kendo Grid可以引入onRendered等事件吗?我觉得这是解决这个问题的正确方法。

提前感谢您的时间。

2 个答案:

答案 0 :(得分:0)

终于搞清楚了!这根本不是Kendo UI的问题。这是Marionette框架的一个错误。在我试图做$('#mygrid')。数据(' kendoGrid')时,#mygrid没有附加到DOM - 渲染正在执行 - DOM。当然选择器什么也没有回来!所以我为Marionette和Kendo网格做了一个解决方法,开始工作得很好!

答案 1 :(得分:0)

$("#grid").on("DOMSubtreeModified", function () {
  var grid = $("#grid").data("kendoGrid");
  if (grid) {
    console.log("Grid is ready!"); 

    /* Note that dataSource will not be available here. 
    You can however start attaching event handlers e.g. 
    grid.bind("dataBound", func) */

    $("#grid").off("DOMSubtreeModified");
  }        
});
相关问题