He creado una función refreshJQuery()
que aplica todos mis comportamientos fornidos de una vez. Luego llamo a esta función cuando me suscribo a observables en mi modelo de vista para actualizar mi modelo. Y una vez en la carga de la página.
function refreshJQuery() {
$(".draggable, .droppable, .resizable").each(function() {
var $element = $(this);
if ($element.hasClass("draggable") && !$element.data("init-draggable")) {
$element.data("init-draggable", true).draggable(dragBehavior);
}
if ($element.hasClass("droppable") && !$element.data("init-droppable")) {
$element.data("init-droppable", true).droppable(dropBehavior);
}
if ($element.hasClass("resizable") && !$element.data("init-resizable")) {
$element.data("init-resizable", true).resizable(resizeBehavior);
$(this).children().fadeTo(2000, 0);
$element.hover(function() {
$(this).children().fadeTo(200, 1);
},
function() {
$(this).children().fadeTo(750, 0);
});
}
});
};
entonces lo uso de la siguiente manera, aunque he identificado otros 2 observables Tengo que llamar a esta función desde también:
this.updateTime = function() {
service.updateBookingTimes(this.id(), this.startDate(), this.endDate());
refreshJQuery();
};
this.startDate.subscribe(this.updateTime, this);
this.endDate.subscribe(this.updateTime, this);
También he implementado @ solución de RPNiemeyer para jQuery terreno suscripciones, así que además de su muestra para un datepicker, tengo un código similar que vuelve a aplicar las etiquetas $.button()
a <a>
y otra que convierte casillas de verificación en conmutadores de estilo de iPhone.
¿Puede explicar su situación un poco más? Normalmente, usaría un enlace personalizado que está vinculado a un observable. Cuando eso observable cambia, entonces el enlace se ejecutará sea cual sea el código de la interfaz de usuario de jQuery contra el elemento en el que permanecen las vinculaciones. Existe una forma potencial de hacer lo que está pidiendo, pero me gustaría saber más sobre el caso de uso antes de sugerirlo, ya que no es la forma normal de hacerlo. –
actualicé mi publicación principal: digamos que siempre quiero un fechador de JQuery en todos los cuadros de texto con la clase 'needsdate', en lugar de agregar esto a cada uno de mis modelos de vista, sería genial si pudiera hacerlo globalmente. ¿Eso ayuda? – RodH257
Si no es vinculante para un modelo de vista, entonces probablemente no necesite knockout para esto. –