javascript - 这是 Kendo Ui Grid 错误吗?

标签 javascript jquery asp.net-mvc kendo-ui kendo-grid

所以我使用 Kendo Ui 创建了网格,并且在这个网格中我有一个详细信息行模板。我这样创建主网格

 $(document).ready(function() {
    var theModel = @(Html.Raw(Json.Encode(Model.Datas)));
   //If the model is empty then create the No data Grid
   if (theModel.length < 1) {
       $("#AccessGrid").kendoGrid({
           columns:[
               {
                   field: "Message",
                   title: " "
               }
               ],              
           dataSource: [{Message:"No data"}]
       });
   } else {//create the normal grid
         $("#AccessGrid").kendoGrid({
        columns:[
            {
                field: "ProjNo",
                title: "Project #"
            }, 
            {
                field: "ProjType",
                title: "Job Type"
            },
            {
                field: "ProjAddress",
                title: "Address"
            }],
        selectable:true,
        scrollable:false,
        dataSource:theModel,
        detailTemplate:  kendo.template($("#AcccessDetailTemplate").html()),
        detailInit:initDetailGrid
    });
   }

});

initDetailGrid(e)用于创建细节网格

function initDetailGrid(e) {

    var grid = e.sender;

    var currentDataItem = grid.dataItem(grid.select()); //Get the data for the selected row
    //if there are no data in intExtData then create a default obj

    if (currentDataItem.InternalData == null||currentDataItem.InternalData == undefined||currentDataItem.InternalData.length < 1 ) {           
            currentDataItem.InternalData = [{          
                TaskId:-1,
                Internal: -1,
                Sequence: -1
        }]; 
    }

    e.detailRow.find("[name='AcccessDetail']").kendoGrid({
        columns:[
           {
            field:"TaskId",
            title: "<input type='checkbox' onclick='AccessModal.checkAll(event)'/>",
            template:$("#detailInputColumnTemplate").html(),
            width: "35px"
        },
        {
            field: "Internal",
            title: " ",
            template:$("#detailColumnTemplate").html()            
        }
        ],
        scrollable:false,
        dataSource:currentDataItem.InternalData
    });      
}

问题是有时我的详细信息模板没有显示一行或多行,并且会抛出一个错误,提示 Uncaught TypeError: Cannot read property 'InternalData' of null,但这怎么可能呢?我知道那里有数据,因为如果我刷新并单击行详细信息,数据就会显示出来。这种情况不会一直发生,但足以让我注意到。有没有人遇到过这样的事情

最佳答案

这不是错误。您不应依赖所选行来获取详细信息行的数据。 detailInit 事件提供对传递给处理程序的事件对象的 data 字段中的行数据的直接访问。

试试这个:

function initDetailGrid(e) {
    var grid = e.sender,
        dataItem = e.data;

    if (!dataItem.InternalData || dataItem.InternalData.length === 0 ) {
        // ...
    }

    // ...
}

希望对您有所帮助!

关于javascript - 这是 Kendo Ui Grid 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056065/

相关文章:

asp.net-mvc - Asp.net MVC 类型的双模型绑定(bind)器

c# - asp.net 5 中的国际化

c# - MVC Excel 互操作

javascript - 弹出窗口不会通过使用模态类进入 Bootstrap

javascript - 如何在云功能中获取 firebase 数据库数据?

php - 文档写入问题

jquery - 仅过滤 google map api 中的子区域

jquery - Phonegap 和 jQuery Mobile,如何更改内容而不是页面的 html?

php - 在 jQuery 中获取复选框值?

javascript - Protractor - getText() 返回数组而不是字符串