我想在渲染(显示/隐藏列等)后对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
等事件吗?我觉得这是解决这个问题的正确方法。
提前感谢您的时间。
答案 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");
}
});