【发布时间】:2013-12-30 19:41:44
【问题描述】:
我正在使用从异步调用加载的 Kendo UI Grid 对象(Javascript 版本)。行是从为每行定义多个按钮的行模板创建的 - 这些是纯 HTML INPUT 元素 - 所有处理它们的代码都在单独的 Javascript 文件中。
创建网格时(即所有TR 元素已由Grid 控件在DOM 中创建)我需要遍历所有行并将事件处理程序附加到各种按钮并更新一些他们的属性。我的问题是我无法弄清楚网格何时创建了 DOM 元素(TR-s)。我尝试使用 dataBound 触发的事件,但尚未创建网格 DOM - 只能操作响应数据。我也尝试了detailInit 事件,但它没有被触发(我并不感到惊讶 - 网格没有细节项)。
我找到了this Telerik forum,Telerik 代表建议使用setTimeout() 来轮询元素是否存在于 DOM 中。我很难相信这个有问题的解决方案是应该作为回调构建到网格中的唯一方法。
所以我的问题是,有没有一种可靠的方法可以检测刷新后网格 DOM 何时准备就绪?或者,有没有办法检测每个TR 元素的创建(一个一个)?
编辑
添加代码:
var oDataSource =
{
type : "odata",
error : function ( oEvent )
{
// show error
},
transport :
{
read :
{
url : "http://url.com/...",
dataType : "json"
}
},
schema :
{
data : function ( oData )
{
return ( oData["value"] );
},
total : function ( oData )
{
return ( oData["odata.count"] );
},
model :
{
fields :
{
/* Model definition */
}
},
pageSize : 15,
serverPaging : true,
serverFiltering : true,
serverSorting : true
}
};
var oGridSettings =
{
dataSource : oDataSource,
rowTemplate : kendo.template ( $( "#detail-row-template" ).html () ),
sortable : true,
pageable : true,
columns :
[
/* Column definitions */
]
};
oDiv.kendoGrid ( oGridSettings );
【问题讨论】:
-
您能否将带有异步调用和网格创建的代码添加到您的问题中?
-
据我所知,更新DOM后触发DataBound事件;在 DOM 更改之前触发了一个 DataBinding 事件;你如何确定 DOM 在 dataBound 中没有准备好?
-
@LarsHöppner 你是对的——DOM 已经准备好了。我被没有可见的新 DOM 元素误导了。
我在代码中有一个错误,在调试器中它无法拾取项目。
标签: javascript kendo-ui kendo-grid