Ich arbeite an einem SPA, das ich mehrere Masteransichten verwenden möchte. Hier ist mein Anwendungsfall:
Ich habe einen Benutzer mit einer Profilseite. Innerhalb dieser Profilseite möchte ich einige verschiedene Ansichten anzeigen können, z. Details, Arbeiten, Kontaktinformationen usw. Ich muss in der Lage sein, eine tiefe Verbindung zu jeder dieser Ansichten herzustellen. Jede dieser Ansichten muss die grundlegenden Benutzerdaten aus der Master-Layout-Ansicht anzeigen.
Es ist mein Verständnis, dass ich Compose dafür verwenden sollte und ich habe ein bisschen Code, der zu funktionieren scheint, jedoch möchte ich in der Lage sein, Daten von der "sekundären Shell" auf die tatsächliche Unteransicht zu übertragen. Es scheint, dass die Splat-Daten nicht an die Methode activate des Unteransichtsmodells weitergegeben werden.
In meinem "master" Viewmodel habe ich eine Observable namens activeView erstellt, die eine Zeichenkette enthält, die einem Subviewmodel (viewmodels / user / details) entspricht. Ich habe dann eine Knockout-Aussage, die wie folgt lautet:
%Vor%Wie kann ich Daten an die Unteransicht übergeben? Oder gibt es einen besseren Weg, dies zu tun?
Vielen Dank im Voraus!
Laut mir ist ko.compose nicht so dynamisch und scheint wie Razors Layout zu funktionieren. Mit durandal ist es besser, separate Ansichten zu erstellen, als Sie können, und diese dann mit dem Router zu verknüpfen. Ich arbeite mit John Papas Hot-Towel-Vorlage; Mein Vorschlag betrifft die Weitergabe von Daten (mehr als id) mit durandal router und knockout.
Beim Initialisieren Ihrer App (shell.js, main.js, ...) Ordnen Sie Ihre Routen irgendwo (shell.js oder main.js) mit Einstellungen für die spätere Filterung zu. Erstellen Sie für Routen, die Daten transportieren, diese mit dem Vorschlag (: id)
%Vor%Wo und wann einige Routen benötigt wurden Sie können sich Joseph Gabriels Lösung ( Ссылка ) ansehen, um Ihre Routen dort zu filtern, wo und wann Sie sie benötigen. Nachdem Sie die Routen gefiltert haben, können Sie routeInfo hacken, um Ihre Parameter (Zeichenfolgen oder Objekte wie selectedItem) zu transportieren.
%Vor%Erweitern Sie Ihre routeInfo aus den Filterergebnissen mit den Daten, die Sie transportieren möchten
%Vor%Ihr (myItem) ist jetzt an diese Routen angehängt, so wie Sie möchten Diese oder diese Route (n) werden Ihre Daten mit sich führen und werden niemals verloren gehen, es sei denn, Sie haben das gleiche Objekt des Routers ( myItem )
aktualisiert %Vor%Eine Route kann verschachtelte Routen enthalten Nützlich für verschachtelten Kontext wie verschachtelte Menüs; Sie können mit Kinderrouten spielen, indem Sie die Reise vorbereiten, wenn eine Elternroute aktiv ist:
%Vor%NB. : Bevor Sie diese Problemumgehung nutzen, müssen Sie das Sicherheitsproblem berücksichtigen und da ich neu bei Durandal bin, weiß ich nicht, ob dies ernsthafte Konsequenzen für den Lebenszyklus des Routers mit sich bringt. Achten Sie auch darauf, dass der Name des Objekts permanent während der Route des Routers bleibt.
Wie wäre es, wenn Sie ein Benutzerobjekt erstellen und es in jedem Ihrer Ansichtsmodelle benötigen? Die einfache Sache wäre, sie an die App anzuhängen (d. H. App.user =) Änderungen, die an einer der Observablen in dem Benutzerobjekt vorgenommen werden, werden zu jeder der Ansichten und Ansichtsmodellen innerhalb Ihres SPA aktualisiert.
Auf diese Weise nutzen Sie die Möglichkeiten des Sub / Pub
der Knockout-BibliothekTags und Links knockout.js single-page-application sammy.js durandal