2014-11-06 5 views
1

я окно Кендо, которая определяется следующим образом:Невозможно открыть Telerik Кендо окна дважды

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.This это позволить динамическим данные, отображаемые в зависимости от того, что пользователь нажал на сетку.

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(); 
    } 
    }); 

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

ответ

2

Найдено решение: гораздо чище, и нет VB Бритва не нужна :)

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

Я создал 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(); 
} 

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

Обновление: добавление привязки события в частичный вид останавливает работу «Модаль». Работая над попыткой исправить это ...