2012-12-15 13 views
6

Sto usando la libreria di kendo-knockout di RPNiemeyer. Ho una finestra kendo che uso come questo nel codice HTML:Kendo-Knockout: Come centrare la finestra

<div data-bind="kendoWindow: { isOpen: isOpen, title:'States', width: 600, height: 150, modal: true, resizable: false, actions: ['Maximize', 'Close'] }" > </div> 

ho usato per centrare la finestra di dialogo come questo:

$('#productionStates').data("kendoWindow").center(); 

Ma, come center è un metodo che non può passare nel markup come questo center: true. Nella documentazione di kendo-knockout c'è un widget di proprietà per alcuni dei widget e la mia ipotesi è che questa sia la chiave ma non sono sicuro di come usarla in quanto non ci sono esempi. Tutte le idee saranno ben accette. Grazie!

risposta

7

Il parametro widget deve essere utilizzato quando è necessario interagire con un widget in un modo non supportato dalle opzioni di collegamento fornite. Normalmente, questa è una specie di ultima risorsa, ma in questo caso sembra che sarebbe la scelta giusta.

Quello che fai è passare un osservabile nel parametro widget e verrà riempito con il widget attuale. Quindi, puoi richiamarne i metodi dal tuo modello di vista.

Qualcosa di simile:

var ViewModel = function() { 
    this.isOpen = ko.observable(false); 
    //center it if it is opened 
    this.isOpen.subscribe(function(newValue) { 
     if (newValue) { 
      this.myWidget().center();   
     } 
    }, this); 

    //hold the widget 
    this.myWidget = ko.observable(); 
}; 

Poi, nel markup:

<div data-bind="kendoWindow: { isOpen: isOpen, visible: false, modal: true, widget: myWidget }"> 
    ... 
</div>​ 

campione qui: http://jsfiddle.net/rniemeyer/gNgDm/

+0

Grazie! Hai intenzione di aggiungere questa funzionalità come proprietà booleana alla tua libreria? Nella mia esperienza, ogni volta che ho bisogno di una finestra modale deve essere centrata. Perché scrivere sempre la logica per chiamare il metodo per farlo esplicitamente? – Mdb

+0

È un po 'complicato perché non esiste il concetto di 'center' /' uncenter' e nessun evento per sapere se la finestra non è più centrata (per impostarla su false) o ora centrata (per impostarla su true). Sembra proprio che dovrebbe essere un'opzione di configurazione supportata dall'interfaccia utente di Kendo. Dovrei pensarci un po 'di più, ma non si adatta al normale schema "vincolante". Posso certamente vedere come sarebbe più comodo però. –

6

realtà ho ottenuto lo stesso effetto di Niemeyer da attaccare nel gestore di rilegatura:

 

    ko.bindingHandlers.kendoWindow.options = { 
     open: function() { this.element.data('kendoWindow').center(); } 
    }; 

Non è necessaria alcuna associazione aggiuntiva, ma vincola l'evento "onOpen".

Problemi correlati