/ / Czy nieprawidłowo buduję wiążące procedury obsługi? - knockout.js, niestandardowe wiązanie

Czy nieprawidłowo buduję wiązania? - knockout.js, niestandardowe wiązanie

We wszystkich moich niestandardowych programach do wiązania, jazawsze pomijaj wywołanie zwrotne aktualizacji. Moje rozumowanie jest takie, że mogę wykonać całą pracę, którą muszę wykonać wewnątrz wywołania zwrotnego init. Tam mogę utworzyć obliczone "s", wywołać applyBindingsToNode (jeśli potrzebuję) lub skonfigurować subskrypcje ręczne dla subskrybentów i wykonać moją manipulację DOM wewnątrz tych subskrypcji.

Obawiam się, że domyślne wiązania w nokaucie są budowane wyłącznie za pomocą wywołania zwrotnego aktualizacji.(Aktualizacja: Już nie, wartość i kilka innych powiązań używa teraz tylko init) Czy jest jakiś minus w wykonywaniu całej pracy wewnątrz wywołania zwrotnego init? Czy jest coś, czego mi brakuje? Dzięki!

Odpowiedzi:

1 dla odpowiedzi № 1

Tworzenie obliczeń i subskrypcji w init funkcja, tak jak to robisz, jest całkowicie obsługiwana w Knockout od wersji 3.0. Jest to bardziej zaawansowana technika niż użycie update ponieważ oznacza to, że należy zachować większą ostrożność, aby zapewnić "przechwytywanie" i reagowanie na wszystkie zależności, a także zbieranie subskrypcji we właściwym czasie.

Dla odniesienia, update sama funkcja jest obsługiwana po prostu w Knockout (zmodyfikowana nieco dla jasności):

var handlerUpdateFn = handler.update;
if (typeof handlerUpdateFn == "function") {
ko.computed(
function () {
handlerUpdateFn(node, getValueAccessor(bindingKey), allBindings,
bindingContext.$data, bindingContext);
},
null,
{ disposeWhenNodeIsRemoved: node }
);
}

0 dla odpowiedzi nr 2

Zastępujesz mechanizm aktualizacji plikuobsługa powiązania z obliczeniami i subskrypcjami, więc oczywiście nie jest to najlepsza praktyka podczas tworzenia niestandardowych procedur obsługi powiązań, w przeciwnym razie nie byłoby funkcji aktualizacji.

Oprócz łamania najlepszych praktyk, jesteś po prostutworzenie dodatkowych narzutów z dodanymi subskrypcjami i obliczeniami, które nie są potrzebne, przepływ obsługi powiązania zostanie wykonany dla ciebie Knockout jest już ocenianie wyrażenia wysłanego do procedury obsługi powiązania i wykonania funkcji aktualizacji dla ciebie. to, dodając obliczenia i subskrypcje, które mogłyby bardzo dobrze spowodować nieoczekiwane zachowanie.Nie mogą być przypadki, w których może to być w pewnym stopniu konieczne, ale nie używanie wbudowanego mechanizmu aktualizacji może tylko powodować problemy i zamieszanie.