Kendo UI 自定义网格弹出编辑器 window 只打开一次
Kendo UI custom grid popup editor window only opens once
我想使用自定义 window 作为 Kendo UI 网格的弹出式编辑器。它的内容将很复杂,包含搜索字段和显示搜索结果的网格。为此,我不想使用 Kendo 模板机制,而是使用真正的弹出窗口 window.
在使用自定义编辑器进行测试时,我遇到了一个问题。即使是非常基本和简单的场景(只是创建命令),我也只能打开编辑器一次。第二次报错,编辑器不显示了,网格变空了。
这是我的 HTML 代码:
<div id="main-content">
<div id="custom-window">
</div>
<table id="my-table-grid">
</table>
</div>
JavaScript部分:
function openCustomWindow(e) {
e.preventDefault();
myWindow.center().open();
}
function editorWindowClosed(e) {
myGrid.cancelRow();
}
var myWindow = $("#custom-window").kendoWindow({
modal: true,
resizable: false,
title: "Test",
visible: false,
close: editorWindowClosed
}).data("kendoWindow");
var dummyDataSource = new kendo.data.DataSource(
{
schema : {
model : {
id: "id",
fields: {
postion: { type: "number"},
name: { type: "string"},
}
}
}
});
dummyDataSource.add({postion: 1, name: "gswin"});
var myGrid = $("#my-table-grid").kendoGrid({
dataSource: dummyDataSource,
toolbar: [ {
name: "create",
text: "Create"
} ],
editable: {
mode: "popup",
window: {
animation: false,
open: openCustomWindow,
}
},
columns: [
{
field: "postion",
title: "Postion"
},
{
field: "name",
title: "Name"
}
]
}).data("kendoGrid");
JavaScript 控制台中的错误消息:
Uncaught TypeError: Cannot read property 'uid' of
undefinedut.ui.DataBoundWidget.extend.cancelRow @
kendo.all.min.js:29ut.ui.DataBoundWidget.extend.addRow @
kendo.all.min.js:29(anonymous function) @
kendo.all.min.js:29jQuery.event.dispatch @
jquery-2.1.3.js:4430jQuery.event.add.elemData.handle @
jquery-2.1.3.js:4116
最后 jsfiddle link 来展示我在做什么。 (弹出窗口是空的,因为我只想在继续之前修复打开/关闭机制)
我不明白为什么会出现此错误,我希望能够根据需要多次打开/关闭弹出窗口。默认的编辑器弹出窗口工作正常。
我的一位同事找到了解决方案(感谢他)。
其实就是这段代码
editable: {
mode: "popup",
window: {
animation: false,
open: openCustomWindow,
}
}
旨在配置默认弹出...
使用自定义弹出窗口的正确方法如下:
editable :true,
edit: openCustomWindow,
使用这种方法最好使用
function editorWindowClosed(e) {
myGrid.cancelChanges();
}
而不是
function editorWindowClosed(e) {
myGrid.cancelRow();
}
实际上我之前回答中的方法解决了我的问题,但又引起了另一个问题。网格变为可编辑,但处于默认模式(即 "inline")。
这样做
editable: "popup",
edit: openCustomWindow
已修复此其他问题,但现在显示 2 个弹出窗口。
我终于成功地隐藏了默认弹出窗口,只显示了我的自定义弹出窗口,但它以初始问题中描述的原始问题结束...
考虑到所有这些信息,我得出结论,使用自定义弹出窗口 window 绝对不是一个选项。我将开始使用模板。
另一种解决方案是使用模板覆盖带有自定义 "Add" 按钮的工具栏,并使用自定义命令进行编辑。但在这一点上我也认为 "tricky".
我想使用自定义 window 作为 Kendo UI 网格的弹出式编辑器。它的内容将很复杂,包含搜索字段和显示搜索结果的网格。为此,我不想使用 Kendo 模板机制,而是使用真正的弹出窗口 window.
在使用自定义编辑器进行测试时,我遇到了一个问题。即使是非常基本和简单的场景(只是创建命令),我也只能打开编辑器一次。第二次报错,编辑器不显示了,网格变空了。
这是我的 HTML 代码:
<div id="main-content">
<div id="custom-window">
</div>
<table id="my-table-grid">
</table>
</div>
JavaScript部分:
function openCustomWindow(e) {
e.preventDefault();
myWindow.center().open();
}
function editorWindowClosed(e) {
myGrid.cancelRow();
}
var myWindow = $("#custom-window").kendoWindow({
modal: true,
resizable: false,
title: "Test",
visible: false,
close: editorWindowClosed
}).data("kendoWindow");
var dummyDataSource = new kendo.data.DataSource(
{
schema : {
model : {
id: "id",
fields: {
postion: { type: "number"},
name: { type: "string"},
}
}
}
});
dummyDataSource.add({postion: 1, name: "gswin"});
var myGrid = $("#my-table-grid").kendoGrid({
dataSource: dummyDataSource,
toolbar: [ {
name: "create",
text: "Create"
} ],
editable: {
mode: "popup",
window: {
animation: false,
open: openCustomWindow,
}
},
columns: [
{
field: "postion",
title: "Postion"
},
{
field: "name",
title: "Name"
}
]
}).data("kendoGrid");
JavaScript 控制台中的错误消息:
Uncaught TypeError: Cannot read property 'uid' of undefinedut.ui.DataBoundWidget.extend.cancelRow @ kendo.all.min.js:29ut.ui.DataBoundWidget.extend.addRow @ kendo.all.min.js:29(anonymous function) @ kendo.all.min.js:29jQuery.event.dispatch @ jquery-2.1.3.js:4430jQuery.event.add.elemData.handle @ jquery-2.1.3.js:4116
最后 jsfiddle link 来展示我在做什么。 (弹出窗口是空的,因为我只想在继续之前修复打开/关闭机制)
我不明白为什么会出现此错误,我希望能够根据需要多次打开/关闭弹出窗口。默认的编辑器弹出窗口工作正常。
我的一位同事找到了解决方案(感谢他)。
其实就是这段代码
editable: {
mode: "popup",
window: {
animation: false,
open: openCustomWindow,
}
}
旨在配置默认弹出...
使用自定义弹出窗口的正确方法如下:
editable :true,
edit: openCustomWindow,
使用这种方法最好使用
function editorWindowClosed(e) {
myGrid.cancelChanges();
}
而不是
function editorWindowClosed(e) {
myGrid.cancelRow();
}
实际上我之前回答中的方法解决了我的问题,但又引起了另一个问题。网格变为可编辑,但处于默认模式(即 "inline")。
这样做
editable: "popup",
edit: openCustomWindow
已修复此其他问题,但现在显示 2 个弹出窗口。
我终于成功地隐藏了默认弹出窗口,只显示了我的自定义弹出窗口,但它以初始问题中描述的原始问题结束...
考虑到所有这些信息,我得出结论,使用自定义弹出窗口 window 绝对不是一个选项。我将开始使用模板。
另一种解决方案是使用模板覆盖带有自定义 "Add" 按钮的工具栏,并使用自定义命令进行编辑。但在这一点上我也认为 "tricky".