网格按钮单击上的Kendo UI窗口不会第二次打开

时间:2013-11-07 13:52:36

标签: jquery kendo-ui kendo-grid kendo-asp.net-mvc

我正在开发一个MVC Kendo Ui项目,我遇到了以下问题:

我有一个带有自定义编辑按钮的可编辑的剑道网格,它在剑道窗口上打开一个局部视图,就像一个“编辑模板”。这似乎第一次工作正常但如果我关闭窗口并尝试编辑另一个项目甚至相同只是不起作用。我认为当我关闭窗口时,这会消除DOM中的元素,但无法弄清楚如何修复它。这是一些代码:

@(Html.Kendo().Grid(Model)
      .Name("gridUbicaciones")
      .Columns(col =>
          {
              col.Bound(x => x.UbicacionId);
              col.Bound(x => x.Nombre);
              col.Bound(x => x.Latitud);
              col.Bound(x => x.Longitud);
              col.Bound(x => x.Altitud);
              col.Bound(x => x.Comentario);
              col.Command(cmd =>
                  {
                      cmd.Custom("Editar").Click("editItem");                     
                      cmd.Destroy().Text("Borrar");
                  }).Width(210).HtmlAttributes(new {style = "text-align:center;"});
          })
      .ToolBar(toolbar => toolbar.Create().Text("Agregar") )
      .Pageable()
      .Sortable()
      .Filterable()
      .DataSource(dsource => dsource
                                 .Ajax()
                                 .PageSize(8)
                                 .ServerOperation(false)
                                 .Model(model => 
                                     {
                                         model.Id(x => x.UbicacionId);
                                         model.Field(x => x.UbicacionId).Editable(false);
                                     })
                                 .Read(read => read.Action("Ubicaciones_Read", "Home").Type(HttpVerbs.Post))
                                 .Destroy(destroy => destroy.Action("Ubicaciones_Destroy", "Home"))
                                 .Update(update => update.Action("Ubicaciones_Update", "Home"))
                                 .Create(create => create.Action("Ubicaciones_Create", "Home"))
      ))
<div id="kendoWindowPopUp"></div>

JAVASCRIPT:

function editItem(e) {
    e.preventDefault();
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    if ($("#kendoWindowPopUp") == undefined)
        $("divUbicaciones").append("<div id=\"kendoWindowPopUp\"></div>");
    var windowObject = $("#kendoWindowPopUp").kendoWindow({
        resizable: false,
        modal: true,
        refresh: function () { this.center();},
        onClose: function () {

            windowObject.destroy();
            alert('hi close');// THIS CODE DOES NOT RUN
        }

    })
    .data("kendoWindow");



    windowObject.refresh({
        url: "/Home/EditorUbicacion?UbicacionId=" + dataItem.UbicacionId

    });
        windowObject.open();

}

我收到以下js错误:

  

未捕获TypeError:对象[object Object]没有方法'kendoWindow'

提前致谢!

2 个答案:

答案 0 :(得分:1)

答案在评论中。在这里添加它为像我这样通过谷歌打这个:)。当通过AJAX加载的页面包含对jQuery的脚本引用时,通常会导致此问题。重新初始化jQuery时,将清除所有基于jQuery的数据属性,包括保存Kendo UI小部件对象的数据(kendoWidget)属性。

  1. 请确保Window不会在页面上加载重复的jQuery实例。
  2. 使用&#39; iframe&#39;

    $("#dialog").kendoWindow({
       // load complete page...
       content: "/foo",
       // ... and show it in an iframe
       iframe: true
    });
    

    您可以在Telerik docs here

  3. 中找到更多信息

答案 1 :(得分:0)

你的问题在于你的editItem(),onClose默认情况下不会从DOM中删除元素,你是故意这样做的。要刷新窗口内容,请进行以下检查:

function editItem(e) {
        e.preventDefault();
        var dataItem = this.dataItem($(e.currentTarget).closest("tr"));

        // Window variable
        var wnd = $("#kendoWindowPopUp");
        if (!wnd.data("kendoWindow")) {
            // initialized on first call and successive calls will reuse this object
            wnd.kendoWindow({
                width: "600px",
                title: "title",
                actions: [
                    "refresh",
                    "Minimize",
                    "Maximize",
                    "Close"
                ],
                resizable: false,
                modal: true,
                visible: false
                // Leave all events with their default behavior                
            });
        }

        var windowObject = wnd.data("kendoWindow");
        windowObject.refresh({
            url: "/Home/EditorUbicacion?UbicacionId=" + dataItem.UbicacionId
        });
        windowObject.open().center();
    }