Ho creato una funzione refreshJQuery()
che applica tutti i miei comportamenti muscolosi in una volta sola. Quindi chiamo questa funzione quando mi iscrivo agli osservabili nel mio modello di vista per aggiornare il mio modello. E una volta caricato a pagina.
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);
});
}
});
};
poi lo uso come segue, anche se ho identificato 2 altre osservabili ho bisogno di chiamare questa funzione da anche:
this.updateTime = function() {
service.updateBookingTimes(this.id(), this.startDate(), this.endDate());
refreshJQuery();
};
this.startDate.subscribe(this.updateTime, this);
this.endDate.subscribe(this.updateTime, this);
Ho anche implementato @ soluzione RPNiemeyer per il livello di campo JQuery abbonamenti, quindi oltre al suo esempio per un datepicker, ho un codice simile che riapplica i tag $.button()
a <a>
e un altro che converte le caselle di controllo in switch di stile iPhone.
fonte
2013-06-11 11:50:42
Puoi spiegare un po 'di più il tuo scenario? In genere, si utilizzerà un'associazione personalizzata vincolata a un osservabile. Quando tale osservabile cambia, il binding eseguirà qualsiasi codice jQuery UI necessario per l'elemento su cui i binding sono attivi. C'è potenzialmente un modo per fare ciò che stai chiedendo, ma vorrei saperne di più sul caso d'uso prima di suggerirlo, in quanto non è la strada normale da percorrere. –
aggiornato il mio post principale: Diciamo che voglio sempre un Datepicker JQuery su tutte le caselle di testo con classe 'needsdate', piuttosto che aggiungerlo a ciascuno dei miei modelli di vista, sarebbe bello se potessi farlo globalmente. Questo aiuta? – RodH257
Se non si è vincolati a un viewmodel, probabilmente per questo non è necessario il knockout. –