Kendo UI MVC
已实现分层网格,现在需要响应子行中复选框上的事件。我已经看过使用" next tr"的示例,但如果子网格有多行并且我对子网格的第二行上的事件做出响应,这是否仍然适用?
在ClientTemplate for column中,我想调用一个javascript函数,但我需要传递一个对复选框所在当前行的引用。我用什么来传递。
例如。我需要传递对当前行的引用,该行具有复选框作为applyLedger javascript函数的参数。如何获取模板中的行的引用?或者,我是否正在努力解决这个问题,也许应该考虑使用不同类型的剑道对象?
columns.Bound(order => order.Enabled).Title("Apply").HtmlAttributes(new { style = "text-align:center;" }).ClientTemplate("<input id='applyWarehouse' type='checkbox' onclick='applyLedger(this, #= OrderID #, \"\\#= OrderNumber\\#\");' class='chkbx' \\#= Enabled ? checked='checked' : '' \\# />").Width(5);
[更新]
在阅读下面的Joe的回复之后,我就抓住了包含复选框所在行的PARENT网格的父行。
function applyLedger(e) {
var tr = $(e).closest("tr"); // get the row containing the checkbox
var data = $("#my-grid").data("kendoGrid").dataItem(tr); // get the data model
// do business stuff using data ...
// get parent row of detail grid
var parentRow = tr.closest("tr");
var parentRowData = $("#my-parent-grid").data("kendoGrid").dataItem(parentRow);
}
答案 0 :(得分:1)
你几乎就在那里;我想如果您可以获得对在事件处理程序中引发click事件的控件的引用,最简单的方法将始终是使用jquery爬上DOM并从函数中找到tr
,而不是尝试从外面传递这些知识。
由于您将this
作为第一个参数传递给applyLedger
,因此点击处理程序中的上下文应该是您的复选框,在这种情况下,找到tr
应该简单如下:< / p>
function applyLedger(e) {
var tr = $(e).closest("tr"); // get the row containing the checkbox
var data = $("#my-grid").data("kendoGrid").dataItem(tr); // get the data model
// do business stuff using data ...
}
请注意询问与网格行关联的data
模型的网格的代码,这使得不必要地传递各种属性。所以你的MVC代码也可以简化:
.ClientTemplate("<input id='applyWarehouse' type='checkbox' onclick='applyLedger(this);' class='chkbx' \\#= Enabled ? checked='checked' : '' \\# />").Width(5);
另外,您也应该从复选框模板中删除id
,因为这应该是您网页上唯一的;考虑改为使用name
。
希望这有帮助。