Zauważyłem, że gdy wiele atrybutów modelu Backbone są ustawione tak jak są wyzwalaneJak ograniczyć zdarzenia zmiany liczby podczas ustawiania wielu atrybutów?
model.set({
att1:val1,
att2:val2
});
dwa wydarzenia zmieniają. Błędnie założyłem, że tylko jedno zdarzenie zmiany zostanie uruchomione po ustawieniu wszystkich atrybutów na.
To może nie wydawać się problemem, ale dzieje się tak, gdy funkcja jest przypisana do att1, która również używa wartości att2. Innymi słowy, jeśli zrobisz to, zmienna att2 zostanie ustawiona na starą wartość atrybutu modelu att2.
Pytanie brzmi, jak temu zapobiec w elegancki sposób. Oczywiście jedną opcją jest ustawienie att2 przed ustawieniem att1 lub powiązanie z att2 (zamiast att1), ale wydaje się, że jest to tylko realna opcja w prostych sytuacjach. Ta ostatnia opcja zakłada również, że atrybuty są ustawione w kolejności, w jakiej są wymienione w metodzie zestawu (co moim zdaniem ma miejsce).
Kilka razy spotkałem się z tym problemem, stąd moje pytanie. Problem polega na tym, że zajęło mi trochę czasu, aby uświadomić sobie, co się właściwie dzieje.
W końcowej notatce, tak samo jak możesz przekazać {ciszę: true} jako opcję zestawu metody, byłoby miło mieć opcję {group: true} (lub coś w tym stylu), wskazując, że zmiana zdarzenia powinny być uruchamiane dopiero po ustawieniu wszystkich atrybutów.
Dzięki za wejście, Sander. Początkowo korzystałem z niestandardowego zdarzenia, ale zastanawiałem się, czy istnieje opcja "grupowania" zmian zdarzeń, gdy wiele atrybutów jest ustawionych jednocześnie. Na podstawie Twojej odpowiedzi zakładam, że odpowiedź brzmi "nie". Na marginesie, zdarzenia niestandardowe są rzeczywiście potężną opcją. –
Dodałem opcję użycia zdarzenia zmiany globalnej, po wykryciu wyzwalaczy po wywołaniu atrybutu logów – Sander
Wielkie dzięki, Sander. To całkowicie wyjaśnia problem. –