Ich denke, dass meine Anwendung jetzt ziemlich groß wird, zu groß, um jede Ansicht mit einem einzelnen ViewModel zu verarbeiten.
Ich frage mich also, wie schwierig es wäre, mehrere ViewModels zu erstellen und sie alle in eine einzige Ansicht zu laden. Mit dem Hinweis, dass ich auch in der Lage sein muss, X ViewModel- Daten an Y ViewModel- Daten zu übergeben, damit die einzelnen ViewModels miteinander kommunizieren oder sich zumindest bewusst sein können.
Zum Beispiel habe ich ein <select>
Dropdown-Menü. Dieses Auswahl-Dropdown-Menü hat einen ausgewählten Status, mit dem ich die ID des ausgewählten Elements in <select>
einem anderen Ajax-Aufruf in einem separaten ViewModel übergeben kann.
Alle Punkte zum Umgang mit zahlreichen ViewModels in einer einzigen Ansicht sind willkommen :)
masterVM
.Antworten:
Wenn sich alle auf derselben Seite befinden müssen, besteht eine einfache Möglichkeit darin, ein Hauptansichtsmodell zu haben, das ein Array (oder eine Eigenschaftsliste) der anderen Ansichtsmodelle enthält.
Dann
masterVM
können Sie bei Bedarf andere Eigenschaften für die Seite selbst haben. Die Kommunikation zwischen den Ansichtsmodellen wäre in dieser Situation nicht schwierig, da SiemasterVM
die$parent
/$root
in-Bindungen weiterleiten oder die / in-Bindungen oder andere benutzerdefinierte Optionen verwenden könnten .quelle
with:
Bindung verwenden, so dass Sie sich nicht wiederholen werdenKnockout unterstützt jetzt die Bindung mehrerer Modelle. Die
ko.applyBindings()
Methode verwendet einen optionalen Parameter - das Element und seine Nachkommen, für die die Bindung aktiviert wird.Beispielsweise:
Dies beschränkt die Aktivierung auf das Element mit der ID
someElementId
und seinen Nachkommen.Weitere Informationen finden Sie in der Dokumentation .
quelle
[0]
, um ein tatsächliches DOM-Element (anstelle des jQuery-Objekts) wieko.applyBindings(myViewModel, $('#someElementId')[0])
Dies ist meine Antwort, nachdem ich ein sehr großes Projekt mit vielen ViewModels in einer Ansicht abgeschlossen habe.
HTML-Ansicht
Für diese Ansicht erstelle ich zwei Ansichtsmodelle für id = container1 und id = container2 in zwei separaten Javascript-Dateien.
Container1ViewModel.js
Container2ViewModel.js
Danach registrieren sich die beiden Ansichtsmodelle als separate Ansichtsmodelle in DataFunction.js
Auf diese Weise können Sie eine beliebige Anzahl von Ansichtsmodellen für separate Divs hinzufügen. Stellen Sie jedoch sicher, dass Sie kein separates Ansichtsmodell für ein Div innerhalb des registrierten Div erstellen.
quelle
Überprüfen Sie das MultiModels-Plugin auf Knockout JS - https://github.com/sergun/Knockout-MultiModels
quelle
Wir verwenden Komponenten, um dies zu erreichen. ( http://knockoutjs.com/documentation/component-overview.html )
Zum Beispiel haben wir diese Komponentenbibliothek, die wir entwickeln: https://github.com/EDMdesigner/knobjs
Wenn Sie sich in den Code vertiefen, werden Sie feststellen, dass wir beispielsweise die Knopf-Knopf-Komponente an mehreren Stellen wiederverwenden.
quelle