Kendo UI自定义网格弹出编辑器窗口仅打开一次
我想使用自定义窗口作为Kendo UI Grid的弹出编辑器。 其内容将与搜索字段和显示搜索结果的网格相结合。 要做到这一点,我不想使用Kendo模板机制,而是一个真正的弹出窗口。
在使用自定义编辑器进行测试时遇到了一个问题。 即使有一个非常基本和简单的场景(只是create命令),我只能打开一次编辑器。 第二次出现错误时,编辑器不再出现,网格变空。
这是我的HTML代码:
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控制台中的错误消息:
未捕获的TypeError:无法读取undefinedut.ui.DataBoundWidget.extend.cancelRow @ kendo.all.min.js的属性’uid’:29ut.ui.DataBoundWidget.extend.addRow @ kendo.all.min.js:29(匿名函数) )@ kendo.all.min.js:29jQuery.event.dispatch @jquery-2.1.3.js:4430jQuery.event.add.elemData.handle @jquery-2.1.3.js:4116
最后是一个jsfiddle链接来展示我正在做的事情。 (弹出窗口是空的,因为我只想在进一步操作之前修复打开/关闭机制)
我不明白为什么我会收到这个错误,我希望能够在我想要的时间内打开/关闭弹出窗口。 默认编辑器弹出窗口正常工作。
我的一位同事找到了解决方案(感谢他)。
其实这段代码
editable: { mode: "popup", window: { animation: false, open: openCustomWindow, } }
旨在配置默认弹出窗口…
使用自定义弹出窗口的正确方法如下:
editable :true, edit: openCustomWindow,
使用这种方法,它也更好用
function editorWindowClosed(e) { myGrid.cancelChanges(); }
代替
function editorWindowClosed(e) { myGrid.cancelRow(); }
工作jsfiddle链接
实际上,我之前的答案中的方法解决了我的问题,但却引发了另一个问题。 网格变为可编辑但处于默认模式(“内联”)。
这样做
editable: "popup", edit: openCustomWindow
修复了另一个问题,但现在显示2个弹出窗口。
我终于成功隐藏了默认弹出窗口并仅显示我的自定义弹出窗口,但它以最初问题中描述的原始问题结束…
考虑到所有这些信息,我得出结论,使用自定义弹出窗口绝对不是一个选项。 我将开始使用teamplates。
另一种解决方案是使用模板使用自定义“添加”按钮覆盖工具栏,并使用自定义命令进行编辑。 但在这一点上,我认为这太“棘手”了。