Ich habe eine App erstellt und möchte ein zweistufiges Menü anzeigen, bei dem beide Ebenen immer verfügbar sind. Durandal 2.0 stellte seinen neuen Router vor , der 'Kind-Router' unterstützt, die ein einfacheres Deeplinking ermöglichen.
>Meine Frage - Kann ich meine "Kinder" -Navigationsrouten permanent laden lassen (und ein Untermenü anzeigen, wenn der Elternteil nicht aktiv ist), oder ist das Kind-Router-Design auf "Lazy" ausgelegt? lade sie, um sie auszuwerten, sobald ein Deeplink ausgewertet werden soll?
Die Durandal-Beispiele zeigen Hauptnavigation registrieren eine Splat-Route, dann wenn dieses Ansichtsmodell geladen / aktiviert ist, wird der untergeordnete Router registriert.
Zum Beispiel: In dem mit Durandal 2.0 gelieferten Beispiel wird der mian nev in shell.js
Und das ko/index.js
View-Modell registriert dann die untergeordneten Objekte (in activate()
)
Ich möchte meine Routen an einer Stelle definieren, z. B .:
%Vor%Und der Teil, mit dem ich mich abmühen muss, ist die Registrierung der Kinderrouten und deren korrekte Auswertung, wenn ich zu ihnen navigiere. (Rendern des Menüs würde später kommen ...)
%Vor%Ich habe verschiedene Fehler beim Rendern dieses nav gefunden. Meistens interne router.js Fehler beim Versuch, den Hash zu berechnen (entweder von einem nicht aktivierten Eltern oder dem Kind) - so wurden alle Hashes definiert.
Sobald ich es habe, um die Navigation zuzuordnen, scheinen die Child-Routen nicht zugänglich zu sein - sie laden nur die Haupt-Splat-Seite ohne Fehler.
Ich frage mich also, ob ich das überhaupt richtig mache? (Alle Kinderrouten im Voraus registrieren, mit dem Ziel, ein 2-stufiges Menü darzustellen).
Ich denke, der Fallback verwendet so etwas wie die Durandal 1.2-Antwort über Unterrouting , indem er a Kombination aus flacher Routing-Registrierung, benutzerdefinierter 'isSameItem' -Funktion & amp; berechnete Observablen zum Rendern der 2-stufigen Navigation.
Ich hoffe, ich kann dir ein wenig helfen.
Können Sie "Kinder" -Router dauerhaft laden?
Soweit ich weiß, kann man das nicht (oder besser: es gibt keinen einfachen Weg, das zu erreichen). Child-Router sind so konzipiert, dass sie Unterverteilungsfunktionen für bestimmte Ansichten bieten. Sie können diese als Durandal-Navigation in der Durandal-Ansicht betrachten. Wenn wir den Beispielcode auf der Durandal-Seite überprüfen, können wir leicht erkennen, dass die Lebenszeit des Child-Routings mit der gegebenen Ansicht verbunden ist. Wenn wir den Code der Funktion überprüfen, die untergeordnete Routen erstellt, werden wir sehen, dass er einen neuen Router erstellt und nur einen Verweis auf den übergeordneten Router speichert - der übergeordnete Router (in den meisten Fällen der Hauptrouter) hat keine Referenzen auf seine untergeordneten Objekte
%Vor%Was kann getan werden, um mehrstufiges Routing im Hauptrouter zu erreichen?
Ich hatte in der Vergangenheit ein ähnliches Problem, aber mit der alten Version von Durandal. Für dieses Problem hatte ich von Grund auf neu gestartet. Sie haben es ein wenig modifiziert und modifiziert - ich werde die Splat-Route los, da sie beabsichtigt, sie mit Child-Routen zu verwenden, und meine Lösung wird sie nicht verwenden.
%Vor%Im nächsten Schritt wird diese benutzerfreundliche Definition in eine Routentabelle umgewandelt, die leicht im Hauptrouter registriert werden kann.
%Vor%Letzter Schritt ist die Standardregistrierung des Routers und dessen Aktivierung.
%Vor%Wie wird das Register-Routing gerendert, damit das mehrstufige Layout erhalten bleibt?
Mein Code arbeitet mit Bootstrap 2.3.0 und rendert mehrstufiges Menü als Dropdown-Taste. Wenn die Route keine untergeordneten Routen hat (also nur eine einfache Route ist) und keine Eltern hat (ihre Navigation auf der ersten Ebene) wird als einfache Schaltfläche gerendert. Wenn die Route untergeordnete Routen hat, werden ihre gerenderten als Dropdown-Schaltfläche und untergeordneten Routen zur Dropdown-Liste hinzugefügt.
%Vor%Die Stile müssen wahrscheinlich etwas poliert werden, aber die Gesamtlogik ist erledigt.
Tags und Links durandal hottowel durandal-navigation