所以我使用 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/