Stworzyłem funkcję refreshJQuery()
, która stosuje wszystkie moje atrakcyjne zachowania za jednym razem. Następnie wywołuję tę funkcję, gdy subskrybuję obserwowalne w moim modelu widoku, aby zaktualizować mój model. I raz na stronie ładowania.
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);
});
}
});
};
I następnie używać go w następujący sposób, jakbym identyfikowane 2 inne obserwable muszę wywołać tę funkcję z również:
this.updateTime = function() {
service.updateBookingTimes(this.id(), this.startDate(), this.endDate());
refreshJQuery();
};
this.startDate.subscribe(this.updateTime, this);
this.endDate.subscribe(this.updateTime, this);
Ja również realizowany @ rozwiązania RPNiemeyer za szczeblu terenowym JQuery subskrypcji, więc oprócz jego próbki dla datepicker, mam podobny kod, który ponownie przypisuje znaczniki $.button()
do <a>
i inny, który konwertuje pola wyboru na przełączniki stylu iPhone.
Czy możesz wyjaśnić swój scenariusz nieco więcej? Zazwyczaj użyjesz niestandardowego powiązania, które jest powiązane z obserwowalnym. Gdy ta obserwowalna zmiana ulegnie zmianie, wówczas powiązanie będzie działało niezależnie od tego, czy kod JQuery UI jest niezbędny w stosunku do elementu, na którym oparte są wiązania. Potencjalnie można zrobić to, o co prosisz, ale chciałbym usłyszeć więcej o tym przypadku użycia, zanim zaproponujesz to, ponieważ nie jest to normalna droga. –
zaktualizowałem mój główny post: Powiedzmy, że zawsze chcę mieć datepicker JQuery we wszystkich polach tekstowych z klasą 'needsdate', zamiast dodawać to do każdego z moich modeli widoków, byłoby wspaniale, gdybym mógł zrobić to globalnie. Czy to pomaga? – RodH257
Jeśli nie jesteś wiążący dla viewmodelu, prawdopodobnie nie potrzebujesz do tego celu nokautu. –