Kendo ui 是否有一个事件指示剑道网格已渲染?

Kendo ui 是否有一个事件指示剑道网格已渲染?,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我想在剑道网格渲染后对其进行一些更改(显示/隐藏列等)。但是剑道网格不提供任何onRendered事件。那我该怎么做呢 前面,我使用了dataBound事件来实现这一点。它过去工作得很好,因为当数据从AJAX请求到达时,网格已经呈现出来了。然而,我的用例已经改变了——当声明网格时,数据现在已经可用了。因此,dataBound事件中的代码没有找到网格。在下面的代码中,如果(网格)始终返回false: $('#mygrid').kendoGrid({ dataSource: {

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

前面,我使用了
dataBound
事件来实现这一点。它过去工作得很好,因为当数据从AJAX请求到达时,网格已经呈现出来了。然而,我的用例已经改变了——当声明网格时,数据现在已经可用了。因此,
dataBound
事件中的代码没有找到网格。在下面的代码中,如果(网格)始终返回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(),但这感觉像是一个黑客!还有别的办法吗?剑道网格是否可以引入一个事件,例如
onRendered
?我觉得这是解决这个问题的正确方法


提前感谢您的时间。

终于解决了!这根本不是剑道UI的问题。这是一个木偶框架的bug。在我尝试执行$('#mygrid').data('kendoGrid')时,#mygrid没有连接到DOM-渲染是在DOM之外执行的。很自然,选择器什么也没有返回!所以我为木偶和剑道网格设置了一个解决方案,开始工作得很好

似乎从Dojo中可以很好地工作:@CodingWithSpike,谢谢您的示例。这似乎表明数据绑定应该起作用。不幸的是,我无法在代码中复制这一点。已尝试在数据绑定函数中放置断点-$('mygrid')存在,但$('mygrid')。数据('kendoGrid')不存在。仍在试图弄清楚到底发生了什么。有什么想法吗?您可以返回到网格小部件,并将参数传递给事件处理程序。请尝试以下操作:
dataBound:function(dataBoundEvent){var gridWidget=dataBoundEvent.sender;}
或者该事件对象中的其他内容?好的,我可以使用
dataBoundEvent.sender
访问网格。它确实给了我一个解决方法,但它并不漂亮——现在我必须将网格传递给所有嵌套函数。你能想到为什么
dataBoundEvent
知道网格但是
$(“#mygrid”).data('kendoGrid')
不返回它吗?没有线索。我以前从未真正看到过。我也觉得奇怪。查看您的
#grid
元素是否具有属性
data role=“grid”
。任何具有
数据角色的元素
都应该是您调用
.data(“kendoGrid”)
的元素。您也可以尝试Kendo UI Chrome扩展,看看它是否可以找到您的网格:
$("#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");
  }        
});