Aus meinem Verständnis, die Unterschiede sind die Callback-Funktionen zu Ereignissen auf einem AppRouter
sollte in der Controller
statt des gleichen Router-Objekt existieren. Auch gibt es eine Eins-zu-Eins-Beziehung zwischen solchen AppRouter & Controller, alle meine Code von Router bewegt sich jetzt zu Controller, ich sehe nicht zu viel Sinn davon? Also warum sie benutzen? Ich muss etwas verpasst haben?Was ist der Vorteil von Marionette AppRouter + Controller über Backbone.Router?
Antwort
So wie ich es sehe, ist Anliegen zu trennen:
- der Controller funktioniert tatsächlich die Arbeit (die Daten Montage Instanziierung der anzeigen, in Regionen anzeigen usw.) und kann die URL aktualisieren, um den Status der Anwendung (z. B. angezeigten Inhalt) anzuzeigen
- Der Router löst einfach die Controller-Aktion basierend auf der URL, die in der Adressleiste eingegeben wurde
Also im Grunde, wenn Sie auf der Startseite Ihrer App sind, sollte es ohne Router gut funktionieren: Ihre Aktionen (z. Klicken Sie auf einen Menüeintrag) einfach die verschiedenen Controller-Aktionen auslösen.
Dann fügen Sie auf einem Router hinzu: "Wenn diese URL aufgerufen wird, führen Sie diese Controller-Aktion aus". Und innerhalb Ihres Controllers aktualisieren Sie die angezeigte URL mit navigate("my_url_goes_here")
. Beachten Sie, dass Sie trigger: true
nicht bestehen.
Für weitere Informationen Besuche Derick Blogbeitrag http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/ (Absatz „Die‚AHA!‘Bezüglich Moment zweiten Arguments der Router.Navigate“)
ich auch das Thema mehr Länge in der freien Vorschau behandelt habe mein Buch über Marionette. Siehe Seiten 32-46 hier: http://samples.leanpub.com/marionette-gentle-introduction-sample.pdf
Warum nicht nur Ihren Controller eine Erweiterung des Backbone-Router machen und dann können Sie die Routen Hash in der Steuerung? Wenn der Router und der Controller eine Eins-zu-eins-Beziehung haben und alle Routen-Methoden die auf dem Controller vorhandenen Methoden-Namen abgleichen müssen, dann erreichen Sie sowieso keine Modularität/Entkopplung/Trennung. Und wie viele Zeilen ist Ihr durchschnittlicher Routen-Hash? 5 Zeilen? Ich glaube wirklich nicht, dass 5 weitere Zeilen dem Controller viel Unordnung hinzufügen werden. Ich liebe Marionette für sein View-Management, aber einige der App-Level-Sachen scheinen mir sinnlose Verschleierung zu sein. –
5 Zeilen möglicherweise nicht viel Unordnung auf den Controller hinzufügen, aber Sie vollständig Ihre URL-Verwaltung zu zerstreuen. Wo endet "# contacts/3/update"? Vielleicht geht es zu Ihrem "Bearbeiten" -Controller und verwendet diese Ansicht. Aber vielleicht geht es in eine "Listen" -Ansicht mit der Zeile dieses Kontakts, die ein direktes Bearbeitungsformular hat ... Sie wissen es nicht, und das Greppen nach URL-Strings wird keine erfreuliche Entwicklungserfahrung sein. –
Durch die Aufteilung in kleinere Bereiche lassen sich große Anwendungen verwalten. Das Argument yuo make könnte auf Views erweitert werden: Wenn Controller-Aktionen einer View zugeordnet werden, warum nicht in den Controller einfügen? Denn dann enden Sie mit der gleichen Javascript-Suppe, die Sie vermeiden möchten, wenn Sie ein Framework wie Backbone/Marionette verwenden. Mit anderen Worten: Teile und herrsche! Siehe auch http: // lostechies.com/derickbailey/2012/06/04/anders-Hejlsberg-is-rechts-you-can not-halten-large-Programme-in-javascript/ –
Ich habe eine Überschreibung für den Router gemacht. Und verwenden Sie es zur Zeit auf diese Weise (wie Chaplin): https://gist.github.com/vermilion1/5525972
appRoutes : {
// route : controller#method
'search' : 'search#search'
'*any' : 'common#notFound'
},
initialize : function() {
this.common = new Common();
this.search = new Search();
}
- 1. In Racket, was ist der Vorteil von Listen über Vektoren?
- 2. Was ist der Vorteil von scrypt über bcrypt?
- 3. Was ist der Vorteil von sync.WaitGroup über Kanäle?
- 4. Was ist der Vorteil von extend.js?
- 5. Was ist der Vorteil von "Lambda-Ausdrücken"?
- 6. Was ist der Vorteil von .c-Dateien?
- 7. Was ist der Vorteil von Bridge Pattern
- 8. Was ist der Vorteil des Python-Skripts über die Befehlszeile?
- 9. Was ist der Vorteil der Base64-Codierung?
- 10. Was ist der Vorteil der Verwendung von Web-API über Web-Methode in ASP.NET
- 11. Vorteil der Pfeile über Funktionen
- 12. Was ist der Vorteil dieser Konstruktordefinition?
- 13. Was ist der Vorteil der Verwendung von Feder REST Docs
- 14. Was ist der Vorteil der Verwendung von Async mit MVC5?
- 15. Was ist der Vorteil dieses indirekten Funktionsaufrufs?
- 16. PHP: Was ist der Vorteil von spl_autoload_register? Leistung umfasst
- 17. Was ist der tatsächliche Vorteil von ADO.NET Entity Framework?
- 18. Vorteil von $ PATH über Alias
- 19. Was ist der Vorteil der Verwendung von Antennehouse über Apache FOP?
- 20. Was ist der Vorteil von Multimap gegenüber Vektoren?
- 21. Was ist der Vorteil von core.async in Clojurescript?
- 22. Was ist der Vorteil von Apklib aus Glas?
- 23. Was ist der Vorteil von UnityContainer.Resolve gegenüber Activator.CreateInstance?
- 24. Was ist der Vorteil von #selector Update in Swift 2.3?
- 25. Was ist der wirkliche Vorteil von Release-Modus für ASP.Net
- 26. Was ist der Vorteil von text.usetex: True in Matplotlib
- 27. Was ist der Vorteil von <thead>
- 28. Was ist der Vorteil von "Wenn mit einer kurzen Aussage"
- 29. Was ist Vorteil der Verwendung von (function() {...})() in JavaScript
- 30. Was ist der Vorteil von Pip gegenüber Anaconda?
Nun können Sie Ihren Router in viele kleine Controller aufteilen und sie an ein Modul anschließen, um die Dinge zu organisieren ... es ist nur flexibler. – Ingro
Ich kann auch viele normale 'Backbone.Routers' haben oder? Sie werden einen ähnlichen Zweck erfüllen? –
+1 - Ich habe oft gefragt, diese – Bojangles