【问题标题】:Kendo UI custom grid popup editor window only opens onceKendo UI 自定义网格弹出编辑器窗口只打开一次
【发布时间】:2015-04-21 13:35:47
【问题描述】:

我想使用自定义窗口作为 Kendo UI Grid 的弹出编辑器。它的内容将很复杂,带有搜索字段和显示搜索结果的网格。为此,我不想使用剑道模板机制,而是使用真正的弹出窗口。

在使用自定义编辑器进行测试时,我遇到了一个问题。即使有一个非常基本和简单的场景(只是创建命令),我也只能打开一次编辑器。第二次出现错误时,编辑器不再显示,网格变为空。

这是我的 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 控制台中的错误消息:

未捕获的类型错误:无法读取属性 'uid' undefinedut.ui.DataBoundWidget.extend.cancelRow @ kendo.all.min.js: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 link 来展示我在做什么。 (弹出窗口是空的,因为我只想在继续之前修复打开/关闭机制)

我不明白为什么会出现此错误,我希望能够根据需要多次打开/关闭弹出窗口。默认编辑器弹出窗口工作正常。

【问题讨论】:

    标签: javascript jquery kendo-ui kendo-grid


    【解决方案1】:

    我的一位同事找到了解决方案(感谢他)。

    其实就是这段代码

            editable: {
                mode: "popup",
                window: {
                    animation: false,
                    open: openCustomWindow,
                }
            }
    

    旨在配置默认弹出...

    使用自定义弹出窗口的正确方法如下:

           editable :true,
           edit: openCustomWindow,
    

    使用这种方法也更好

    function editorWindowClosed(e) {  
        myGrid.cancelChanges(); 
    }
    

    代替

    function editorWindowClosed(e) {  
        myGrid.cancelRow(); 
    }
    

    工作jsfiddle link

    【讨论】:

      【解决方案2】:

      实际上,我之前的回答中的方法解决了我的问题,但却导致了另一个问题。网格变为可编辑但处于默认模式(即“内联”)。

      这样做

      editable: "popup",
      edit: openCustomWindow
      

      已修复此其他问题,但现在显示 2 个弹出窗口。

      我终于成功隐藏了默认弹出窗口,只显示了我的自定义弹出窗口,但它以最初问题中描述的原始问题结束...

      考虑到所有这些信息,我得出的结论是,使用自定义弹出窗口绝对不是一种选择。我将开始使用团队板。

      另一种解决方案是使用模板来使用自定义“添加”按钮覆盖工具栏,并使用自定义命令进行编辑。但在这一点上,我认为这太“棘手”了。

      【讨论】:

      • 但这似乎是最好的,有效的答案。必须单独创建剑道窗口对象并使用 e.preventDefault() 是我能够获得该编辑功能以停止两次初始化窗口的唯一方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多