Не удается открыть окно Telerik Kendo дважды

У меня есть окно Кендо, которое определяется следующим образом:

 With Html.Kendo().Window().Name("tranferwindow")
    .Title("Select Transfer Destination")
    .Content("")
    .Resizable()
    .Modal(True)
    .Events(Function(events) events.Open("WindowToCenter"))
    .Events(Function(events) events.Refresh("transferopen"))
    .Draggable()
    .Width(400)
    .Visible(False)
    .Render()
    End With

Окно открывается каждый раз с использованием обновления и передачи нового URL-адреса. Это позволяет отображать динамические данные в зависимости от того, что пользователь щелкнул в сетке.

 function transferitem(e) {
    var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
    wwindow.data("kendoWindow").open(); //Display waiting window while refresh happens
    var twindow = $("#tranferwindow")
    twindow.data("kendoWindow").refresh('/Home/TransferList?agentid=' + agentid + '&tenantid='    + tenantid + '&SessionID=' + dataItem.MediaID);
    }

Окно открывается в конце события обновления, чтобы убедиться, что пользователь не видит предыдущее содержимое.

 function transferopen() {
 wwindow.data("kendoWindow").close();  //Close the 'wait' window
 var twindow = $("#tranferwindow")
 twindow.data("kendoWindow").center().open();
 }

Все это работает хорошо, и окно можно закрыть и снова открыть так часто, как мне нравится.

Однако мне нужно было получить доступ к событию изменения размера окна из частичного представления, чтобы изменить размер сетки, которая находится внутри окна. Для этого я добавил следующее к частичному представлению, возвращаемому из URL-адреса.

 $("#tranferwindow").kendoWindow({
 resize: function (e) {
  // resizeGrid();
   }
     });

Добавление этого сопоставления событий вызывает проблему, из-за которой я не могу открыть окно более одного раза. Я предполагаю, что мне нужно как-то «отменить регистрацию» на мероприятие перед закрытием?


person Rob Den Boer    schedule 06.11.2014    source источник


Ответы (1)


Нашел решение: намного чище и не нужен VB Razor :)

Я изменил подход к созданию нового окна каждый раз, когда хотел его отобразить.

Я создал div для хранения окна.

<div id="windowcontainer"></div>

Затем, когда пользователь выбрал команду в сетке, я создаю все окно, добавляя его в div. Ключевым моментом здесь является this.destroy в событии деактивации.

         function transferitem(e) {
         var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
         $("#windowcontainer").append("<div id='tranferwindow'></div>");

         var mywindow = $("#tranferwindow")
         .kendoWindow({
             width: "400px",
             title: "Select Transfer Destination",
             visible: false,
             content: '/Home/TransferList?agentid=' + agentid + '&tenantid=' + tenantid + '&SessionID=' + dataItem.MediaID,
             deactivate: function () {
                 this.destroy();
             },
             open: WindowToCenter,
             refresh:transferopen
         }).data("kendoWindow");
         mywindow.refresh();
         }

Затем в функции обновления

     function transferopen() {
     var twindow = $("#tranferwindow")
     twindow.data("kendoWindow").center().open();
 }

Теперь я могу иметь привязку события внутри частичного представления, которое отлично работает, и окно можно повторно открывать столько раз, сколько я хочу. :)

Обновление: добавление привязки события внутри частичного представления останавливает работу модального режима. Работаем над тем, чтобы исправить это...

person Rob Den Boer    schedule 06.11.2014