我正在开发一个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'
提前致谢!
答案 0 :(得分:1)
答案在评论中。在这里添加它为像我这样通过谷歌打这个:)。当通过AJAX加载的页面包含对jQuery的脚本引用时,通常会导致此问题。重新初始化jQuery时,将清除所有基于jQuery的数据属性,包括保存Kendo UI小部件对象的数据(kendoWidget)属性。
使用&#39; iframe&#39;
$("#dialog").kendoWindow({
// load complete page...
content: "/foo",
// ... and show it in an iframe
iframe: true
});
您可以在Telerik docs here
答案 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();
}