knockout.js - for - Kendo-Knockout: Cómo centrar la ventana
kendo telerik control (2)
El parámetro widget
está destinado a ser utilizado cuando necesita interactuar con un widget de una manera que no es compatible con las opciones de enlace proporcionadas. Normalmente, este es un último recurso, pero en este caso parece que sería la elección correcta.
Lo que debes hacer es pasar un parámetro observable al widget
y se llenará con el widget real. Luego, puede llamar a los métodos desde su modelo de vista.
Algo como:
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();
};
Luego, en el marcado:
<div data-bind="kendoWindow: { isOpen: isOpen, visible: false, modal: true, widget: myWidget }">
...
</div>
Muestra aquí: http://jsfiddle.net/rniemeyer/gNgDm/
Estoy usando la biblioteca kendo-knockout de RPNiemeyer. Tengo una ventana de kendo que uso así en el html:
<div data-bind="kendoWindow: { isOpen: isOpen, title:''States'', width: 600, height: 150, modal: true, resizable: false, actions: [''Maximize'', ''Close''] }" > </div>
Solía centrar el diálogo así:
$(''#productionStates'').data("kendoWindow").center();
Pero como center
es un método, no puedo pasarlo en el marcado como este center: true
. En la documentación kendo-knockout hay un widget de propiedad para algunos de los widgets y creo que esta es la clave, pero no estoy seguro de cómo usarlo ya que no hay ejemplos. Cualquier idea será bienvenida. ¡Gracias!
De hecho, logré el mismo efecto que Niemeyer metiéndolo en el controlador de enlace:
ko.bindingHandlers.kendoWindow.options = { open: function () { this.element.data(''kendoWindow'').center(); } };
No se necesita ningún enlace adicional, pero sí ata su evento "onOpen".