Myślę, że moja aplikacja robi się teraz dość duża, zbyt duża, aby obsłużyć każdy widok za pomocą jednego ViewModel.
Zastanawiam się więc, jak trudno byłoby stworzyć wiele modeli ViewModels i załadować je wszystkie do jednego widoku. Z notatką, że muszę również móc przekazywać dane X ViewModel do danych Y ViewModel, aby poszczególne ViewModels mogły komunikować się ze sobą lub przynajmniej być świadome siebie.
Na przykład mam listę <select>
rozwijaną, ta lista rozwijana ma wybrany stan, który pozwala mi przekazać identyfikator wybranego elementu w <select>
innym wywołaniu Ajax w osobnym ViewModel ....
Doceniono wszelkie punkty związane z obsługą wielu modeli ViewModels w jednym widoku :)
masterVM
.Odpowiedzi:
Jeśli wszystkie muszą znajdować się na tej samej stronie, jednym z łatwych sposobów jest utworzenie modelu widoku głównego zawierającego tablicę (lub listę właściwości) innych modeli widoku.
W
masterVM
razie potrzeby możesz mieć inne właściwości dla samej strony. W tej sytuacji komunikacja między modelami widoku nie byłaby trudna, ponieważ można było przechodzić przezmasterVM
lub można było używać powiązań$parent
/$root
in lub innych niestandardowych opcji.źródło
with:
wiązania, aby się nie powtarzaćKnockout obsługuje teraz wiązanie wielu modeli. The
ko.applyBindings()
Sposobie, opcjonalny parametr - element i jego potomstwo, które są natychmiast aktywowany.Na przykład:
Ogranicza to aktywację do elementu o identyfikatorze
someElementId
i jego potomkach.Więcej informacji znajduje się w dokumentacji .
źródło
[0]
aby określić rzeczywisty element DOM (zamiast obiektu jQuery) w następujący sposób:ko.applyBindings(myViewModel, $('#someElementId')[0])
To moja odpowiedź po ukończeniu bardzo dużego projektu z dużą ilością ViewModels w jednym widoku.
Widok HTML
Dla tego widoku tworzę 2 modele widoków dla id = kontener1 i id = kontener2 w dwóch osobnych plikach javascript.
Container1ViewModel.js
Container2ViewModel.js
Następnie po tych 2 modelach rejestracji rejestrują się jako osobne modele w DataFunction.js
W ten sposób możesz dodać dowolną liczbę modeli widoku dla oddzielnych div. Ale upewnij się, że nie twórz osobnego modelu widoku dla div wewnątrz zarejestrowanego div.
źródło
Sprawdź wtyczkę MultiModels pod kątem Knockout JS - https://github.com/sergun/Knockout-MultiModels
źródło
W tym celu używamy komponentów. ( http://knockoutjs.com/documentation/component-overview.html )
Na przykład mamy tę bibliotekę komponentów, którą opracowujemy: https://github.com/EDMdesigner/knobjs
Jeśli zagłębisz się w kod, zobaczysz, że na przykład ponownie wykorzystujemy element pokrętła w kilku miejscach.
źródło