Kendo ui 剑道网格更改指示器和取消不工作
我是剑道和剑道网格的新手,但我正在尝试学习如何使用主细节剑道网格,其中细节网格应该支持批量编辑。数据在本地JavaScript对象中可用 展示了我所看到的问题 下面是如何创建网格的——完整的代码片段请参见JSFIDLE-Kendo ui 剑道网格更改指示器和取消不工作,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我是剑道和剑道网格的新手,但我正在尝试学习如何使用主细节剑道网格,其中细节网格应该支持批量编辑。数据在本地JavaScript对象中可用 展示了我所看到的问题 下面是如何创建网格的——完整的代码片段请参见JSFIDLE- $(“#网格”).kendoGrid({ 数据源:项目, detailInit:createDetail, 栏目:[ {字段:“项”,宽度:“200px”}, ] }); 函数createDetail(e){ $("") .appendTo(如detailCell) 肯多格里德
$(“#网格”).kendoGrid({
数据源:项目,
detailInit:createDetail,
栏目:[
{字段:“项”,宽度:“200px”},
]
});
函数createDetail(e){
$("")
.appendTo(如detailCell)
肯多格里德先生({
数据源:{
批次:对,
运输:{
阅读:功能(选项){
选项。成功(如数据子项);
}
}
},
是的,
pageable:对,
工具栏:[“保存”、“取消”],
栏目:[
{字段:“子项目”,标题:“子项目”,宽度:200},
{字段:“标题1”,标题:“标题1”,宽度:100}
]
});
}
[更新]-进一步的调查显示,如果我使用较旧的剑道版本2011.3.1129,这将按预期工作。但如果我使用较新的2012.3.1114,它不会。不知道这是错误还是行为上的改变。经过努力,我发现原因似乎是主网格自动重新绑定导致了我观察到的行为。我可以通过在主网格中处理数据绑定事件来解决这个问题,并在主网格中检查是否有任何细节数据源是脏的,如果是,则调用preventDefault 以下是相关的代码片段:
dataBinding: function (e) {
if (masterGrid.AreChangesPending()) {
e.preventDefault();
}
}
AreChangesPending : function () {
var pendingChanges = false;
// I gave each detail div an id so that I can get a "handle" to it
$('div[id^="detail_"]').each(function (index) {
var dsrc = $(this).data("kendoGrid").dataSource;
$.each(dsrc._data, function () {
if (this.dirty == true || this.isNew()) {
pendingChanges = true;
}
});
// For some reason, Kendo did not detect new rows in the isNew()
// call above, hence the check below
if (dsrc._data.length != dsrc._total) {
pendingChanges = true;
}
});
return pendingChanges;
}
dataBinding: function (e) {
if (masterGrid.AreChangesPending()) {
e.preventDefault();
}
}
AreChangesPending : function () {
var pendingChanges = false;
// I gave each detail div an id so that I can get a "handle" to it
$('div[id^="detail_"]').each(function (index) {
var dsrc = $(this).data("kendoGrid").dataSource;
$.each(dsrc._data, function () {
if (this.dirty == true || this.isNew()) {
pendingChanges = true;
}
});
// For some reason, Kendo did not detect new rows in the isNew()
// call above, hence the check below
if (dsrc._data.length != dsrc._total) {
pendingChanges = true;
}
});
return pendingChanges;
}