2012-11-13 18 views
22

Uso il componente finestra di Kendo UI, che è simile a qualsiasi finestra di dialogo modale.Chiusura di una finestra di kendoui con pulsante Chiudi personalizzato all'interno della finestra

Ho un pulsante di chiusura in esso, come faccio a chiudere la finestra su clic su tale pulsante

Il contenuto nella mia finestra viene caricato da un altro (invece di cliccare il default pulsante nella barra del titolo 'X') vista

@(Html.Kendo().Window() 
      .Name("window") 
      .Title("Role") 
      .Content("loading...") 
      .LoadContentFrom("Create", "RolesPermissions", Model.Role) 
      .Modal(true) 
      .Width(550)   
      .Height(300)   
      .Draggable() 
      .Visible(false) 
     ) 

in quella stessa vista, ho

<span id="close" class="btn btn-inverse">Cancel</span> 

Questo è quello che ho in mio punto di vista principale (la vista chiamando la finestra)

$(document).ready(function() { 
    var window = $("#window").data("kendoWindow"); 

    $("#open").click(function (e) { 
     window.center(); 
     window.open(); 
    }); 

    $("#close").click(function(e) { 
     window.close(); 
    }); 
}); 

risposta

27

Fondamentalmente voi già sanno come chiudere la finestra - è necessario farlo con la stretta metodo sue API .

$("#window").data("kendoWindow").close(); 

Ma al fine di collegare il gestore per il pulsante all'interno della vista è necessario attendere fino a quando il contenuto viene caricato - è necessario utilizzare l'evento refresh.

ad es.

$('#theWindowId').data().kendoWindow.bind('refresh',function(e){ 
    var win = this; 
    $('#close').click(function(){ 
     win.close(); 
    }) 
}) 
+0

Ottima, bella spiegazione, ed è esattamente quello che sto cercando! –

+2

Dove va questo codice? Nella funzione pronta della vista principale? Ho provato quello, ma $ ('# theWindowId'). Data(). KendoWindow non è definito ($ ('# theWindowId'). Data() è definito, ma non contiene kendoWindow) –

+1

È necessario farlo dopo il La finestra è inizializzata. Oppure puoi specificare inizialmente il gestore di aggiornamento durante la configurazione della finestra, come usato qui http://demos.kendoui.com/web/window/events.html –

0

c'è un evento in ui kendo per questo dovrebbe essere qualcosa di simile

$("#idofyourbutton").click(function() { 
    $("#window").data("kendoWindow").close(); 
    }); 
+0

che non ha funzionato perché il contenuto caricato nella mia finestra appartiene a quello di un'altra vista. Ho un pulsante nella mia altra vista che ha un ID di "Chiudi" –

+0

ohh intendi il buuton che nella finestra proviene da un'altra vista –

+0

Sì, ho modificato il mio post principale –

1

In JavaScript - HTML window è un oggetto che rappresenta una finestra aperta in un browser. Prova a definire il tuo window come qualcos'altro.

$(document).ready(function() { 
    var wnd = $("#window").data("kendoWindow"); 

    $("#open").click(function (e) { 
     wnd.center(); 
     wnd.open(); 
    }); 

    $("#close").click(function(e) { 
     wnd.close(); 
    }); 
}); 
0

In caso di lavorare con i contenuti caricati da ajax, la risposta del Petur Subev è perfetto! Mi piacerebbe dare un esempio di lavoro con i template, che è più semplice (mentre non tutte le richieste possono essere fatte da ajax). Si consideri il modello di seguito:

<script id="Template_Example1" type="text/kendo-tmpl"> 
<div class="i-contentWindow"> 
    <div> 
     <a id="btn1" href="\#"><span class="k-icon k-i-cancel"></span>Button 1</a> 
    </div> 
</div> 

E ora, Mettiamoci caricare la finestra della chiamata modello di posta close:

function ExampleFn1(dataItem) { 
    //create the template 
    var template = kendo.template($("#Template_Example1").html()); 

    //create a kendo window to load content 
    var kWindow = openKendoWindow({ 
     title: "Window Tests", 
     iframe: false, 
     resizable: false 
    }).content(template(dataItem)); 

    // call window close from button inside template 
    $("#btn1").click(function (e) { 
     e.preventDefault(); 
     alert("btn1 on click!"); 
    }); 

    kWindow.open(); 
} 
Problemi correlati