Kendo ui 延迟后刷新剑道弹出控件

Kendo ui 延迟后刷新剑道弹出控件,kendo-ui,kendo-asp.net-mvc,Kendo Ui,Kendo Asp.net Mvc,我有一个带有自定义弹出编辑器的KendoGrid。[我使用的是ASP.NET MVC的剑道UI和jQuery/Ajax的组合。] 使用Ajax检索所需的外部数据后,如何刷新或重新加载弹出窗口中的文本框编辑:我错了,这是一个编辑器而不是文本框 我已将单击事件附加到网格中的编辑按钮: $(function () { $("#publicationsGrid").on("click", ".k-grid-edit", function (e) { // get the ind

我有一个带有自定义弹出编辑器的KendoGrid。[我使用的是ASP.NET MVC的剑道UI和jQuery/Ajax的组合。]

使用Ajax检索所需的外部数据后,如何刷新或重新加载弹出窗口中的文本框编辑:我错了,这是一个编辑器而不是文本框

我已将单击事件附加到网格中的编辑按钮:

$(function () {
    $("#publicationsGrid").on("click", ".k-grid-edit", function (e) {

        // get the index of the clicked button within the grid
        var index = $(this).index("#publicationsGrid .k-grid-edit");
        // retrieve the compendium id
        var compendiumId = compendiumIds[index];
        if (compendiumId) {
            getCompendiumData(index, compendiumId);
        }
    });
});
然后调用外部web api来检索需要编辑的文件内容,并将此数据分配给my viewmodel的属性:

function getCompendiumData(index, compendiumFileId) {

    if (!compendiumFileId)
        return;     // no compendium file to load
    $.ajax({
        type: "GET",
        beforeSend: function (request) {
            request.setRequestHeader("Authorization", "Bearer " + token);
        },
        url: 'http://some/api/file' + compendiumFileId,
        success: function (response) {
            var grid = $("#publicationsGrid").data("kendoGrid");
            var gridData = grid.dataSource.data();
            gridData[index].CompendiumHTML = response;
            console.log(gridData[index].CompendiumHTML);
            // TODO: change this, it should be possible to 'refresh' the textbox
            var popupTextbox = $("#compendiumPopup #CompendiumHTML").data("kendoTextBox");
            popupTextbox.value(gridData[index].CompendiumHTML);
        },
        error: function (response, status, error) {
            console.log("error details\nstatus: " + status + "error: " + error);
        },
    });
}
此操作完成时,弹出窗口已可见,不会自动刷新。我添加了一些代码,试图手动设置文本框的
.value
,但它不起作用,不需要这样做

单击按钮两次可以正常工作,因为现在可以显示数据,但这不是一个可接受的解决方案

(我在Ajax调用中尝试了
async:false
,但这并不能阻止弹出窗口的显示。)


根据要求,以下是网格代码(我尚未配置任何数据更新):

@(Html.Kendo().Grid(模型)
.名称(“publicationsGrid”)
.列(列=>
{
columns.Bound(c=>c.DocumentUpdateId).Hidden(false);
columns.Bound(c=>c.Title);
columns.Bound(c=>c.PublicationTime).Title(“发布时间”);
columns.Bound(c=>c.Type);
Command(Command=>{Command.Edit().Text(“”;});
})
.Editable(Editable=>Editable.Mode(GridEditMode.PopUp).TemplateName(“概要”))
.DataSource(ds=>ds
.Ajax()
.Model(Model=>
{
model.Id(Id=>Id.DocumentUpdateId);
model.Field(data=>data.DocumentUpdateId).Editable(false);
model.Field(data=>data.PublicationTime).Editable(false);
model.Field(data=>data.Type).可编辑(false);
})
.Update(Update=>Update.Action(“SomeController”、“SomeAction”))
.Events(Events=>Events
.错误(“编辑错误”)
)
)
.Events(Events=>Events
.数据绑定(“onDataBinding”)
.数据绑定(“onDataBound”)
)
)

等待更好的解决方案和更自然的方式来更新弹出控件以反映更改的模型/数据项,我可以在Ajax请求的成功处理程序中使用以下代码来实现这一点:

    var popupTextbox = $("#compendiumPopup #CompendiumHTML").data("kendoEditor");
    popupTextbox.value(gridData[index].CompendiumHTML);

[在上面的第一次尝试中,我错误地引用了
kendoTextBox
而不是
kendoEditor

您是否尝试将此函数指定为网格的
编辑
事件的一部分,然后您不需要将
单击
事件应用于网格编辑按钮。如果这是一个简单的字符串,为什么数据不是绑定到网格的原始模型的一部分,而是从辅助url中提取的?@davidshorthes谢谢,我将研究网格的编辑事件,但是我是否仍然会遇到需要延迟弹出窗口的显示直到Ajax数据可用的问题?有一个初始api调用来加载网格的数据,其中包括一些XML数据。然后,我需要解析这些XML数据以提取一个id,并再次调用api以基于该id获取文件。我希望在需要时获取文件数据,而不是在初始阶段尝试一次性获取所有文件(这将需要许多api调用)。您能添加网格代码吗?我猜你有一个带有
popup
可编辑模式或类似模式的网格,对吗?@DontVoteMeDown添加了网格代码,是的,使用了popup编辑模式。
    var popupTextbox = $("#compendiumPopup #CompendiumHTML").data("kendoEditor");
    popupTextbox.value(gridData[index].CompendiumHTML);