【发布时间】:2014-03-12 16:15:33
【问题描述】:
有没有办法在通过 ajax 重新加载网格后触发事件?
我看到了 RequestEnd 事件。但这似乎发生在请求返回时,但在网格刷新之前。
我还看到了 DataBound 事件。但这发生在 RequestEnd 之前,
同样当我实现 DataBound 事件时,我的标题消失了..
我不得不求助于这个黑客
function requestEnd(o) {
console.debug('request ended.', o);
setTimeout(refreshEditable, 500); // enough time to render the grid
}
function refreshEditable() {
// perform my actions on controls within grid content
}
附带说明.. 我很难找到可靠的 kendo grid mvc API 参考。当我用谷歌搜索它时,我得到了这个: http://docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid 这是一些小方法和一些“事件”的集合,但这些与我在 razor intelisense 中看到的不对应。
更新:添加数据绑定定义
$('#grid').kendoGrid({
dataBound: function(e) {
console.debug('data bound..');
}
});
这里是网格 ajax 定义
.Ajax().Read(read => read
.Action("FilesRead", "SomeController")
.Data("readData"))
function readData() {
return {
IncludeChildren: $("#IncludeChildren").is(':checked'),
SearchString: $('input[id=SearchString]').val()
};
}
我可以看到 DataBound 在进行 ajax 调用时被触发,而不是在它返回之后。
更新
更正了 DataBound 事件挂钩。
在 dataBound 函数中,我正在尝试获取对新呈现的模板的引用..
function dataBound(o) {
console.debug($('span.editable').length); // returns 0
setTimeout("console.debug($('span.editable').length)", 500); // returns 4
}
使用客户端模板添加跨度
.ClientTemplate(@"<span class=""editable"" ... >#=DOCUMENT_DATE_FORMATTED#</span>");
明白我的意思了吗?数据绑定发生在网格渲染之前
【问题讨论】:
-
DOM更新后触发DataBound事件;如果你没有得到你预期的结果,那么你的代码有问题,所以你应该添加
-
@LarsHöppner 添加了该代码。如果需要更多信息,请告诉我。
-
那些 span.editable 元素是哪个模板的一部分?
-
它们在 ClientTemplates 中的几列.. 使最新代码更加清晰.. 字段确实显示了,只是在 DataBound 之后有一些延迟.. 所以很明显这个事件发生在渲染之前新行数
-
还添加了客户端模板定义.. 我正在寻找的是在添加行后触发的事件
标签: javascript kendo-ui telerik kendo-grid telerik-grid