【问题标题】:Kendo. How can I access the nested grid剑道。如何访问嵌套网格
【发布时间】:2017-05-04 14:50:24
【问题描述】:

我使用分层剑道网格。 http://demos.telerik.com/kendo-ui/grid/hierarchy

嵌套网格是用这样的函数创建的:

function detailInit(e) {
$("<div/>").appendTo(e.detailCell).kendoGrid({
    name: "nestedGrid",
    dataSource: {
        ...
    },
    columns: [
        ...
}).addClass("nested-grid-class");

如何在另一个函数中访问网格?例如:

$(window).load(function() {
      var grid = $(".nested-grid-class").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = undefined
      var grid = $("nestedGrid").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = null
      var grid = $("#nestedGrid").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = null
     var grid = $("[name='nestedGrid']").data("kendoGrid");
      alert('grid =  ' + grid);                      // grid = null
});

Sandman 提出的方法也行不通

var grid = $("#MainGrid").data("kendoGrid");
alert('MainGrid = ' + grid);         // ok
var parentRows = grid.tbody.find("tr.k-master-row");
alert('parentRows = ' + parentRows);        // ok

parentRows.each(function (e) {
    var row = $(this).next("tr");
    alert('row = ' + row);        // ok
    if (row.hasClass("k-detail-row")) {
        var nestedGrid = row.find(".k-grid").data("kendoGrid");
        alert('nestedGrid = ' + nestedGrid);        // undefined
        var nestedGrid1 = row.find(".nested-grid-class").data("kendoGrid");
        alert('nestedGrid1 = ' + nestedGrid1);        // undefined        
    }
});

【问题讨论】:

  • 什么时候真正想要嵌套网格?
  • “何时”是什么意思?
  • row 包含什么?使用您的控制台窗口debug your Javascript
  • 查看我的编辑示例

标签: kendo-grid


【解决方案1】:

为了访问网格每一行的嵌套网格,您可以使用以下命令:

var grid = $("#grid").data("kendoGrid");
var parentRows = grid.tbody.find("tr.k-master-row");

这应该让你得到所有parent 行。然后您可以使用.each 遍历这些,以便访问其中的子网格:

parentRows.each(function(e){
   var row = $(this).next("tr");
   if(row.hasClass("k-detail-row")){
      var nestedGrid = row.find(".k-grid").data("kendoGrid");
      // EDIT: In your case, you may need to get by class - UNTESTED
      // var row.find(".nested-grid-class").data("kendoGrid");
      //access nested grid data here          
   }
});

编辑

我已经根据您在问题中发送的初始 Dojo 准备了一个 example,它记录了控制台中的每个 initialised 嵌套网格。 (注意:“.k-grid”和“.nested-grid-class”都是有效的选择器)。

您的问题是在dataBound 事件中仅初始化了第一行,因此这意味着它是唯一创建嵌套网格的行。我进一步扩展了示例,以便在 dataBound 函数 (this.expandRow(this.tbody.find("tr.k-master-row"));) 期间初始化所有嵌套网格。

如果您现在检查控制台,您将看到 6 个父行的列表,以及包含每个嵌套网格数据源的 6 个列表。

【讨论】:

  • 怎么不行?控制台窗口中是否有错误/nestedGrid 变量中有什么?此外,您可能会发现使用控制台窗口进行调试非常有用,而不是警告变量..
  • 我无法理解如何在 cmets 中编写一些代码,因此我将有关您的方法的信息添加到了起始帖子中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 2018-09-21
相关资源
最近更新 更多