Also ich bin wirklich neu bei backbone.js und ich versuche, das grundlegende Konzept zu verstehen, wenn es darum geht, Teile (Ansichten/Modelle/Routen) mit anderen Teilen interagieren.Wie übergebe ich Referenzen von Ansichten/Modellen an andere Ansichten/Modelle/Routen in backbone.js
Hier ist ein Beispiel. Ich habe ein "Bildschirm" -Modellobjekt, das von einer "singleScreen" -Ansicht auf die Seite gerendert wird. Ich habe auch ein Sidebar-Modell und eine Ansicht, die gerendert wird. Wenn ich auf einen Link in der Seitenleiste klicke, möchte ich, dass ein anderes Bildschirmmodell-Objekt gerendert wird und etwas HTML in einem separaten html-div (der Überschrift) entsprechend dem "name" -Attribut geändert wird, das ich meinem Bildschirmmodell gegeben habe.
Also erste Frage, sollte der gesamte Code für das erneute Rendern einer anderen Ansicht und Ändern der Überschrift HTML in der Datei routes.js getan werden? Es sieht so aus, als würde diese Datei ziemlich schnell ziemlich groß werden. Wenn ja, wie erhalte ich einen Verweis auf das Modellobjekt, das ich in der Datei routes.js rendern möchte, damit ich auf Dinge wie myModel.name (welches in der app.js-Datei instanziiert wird) zugreifen kann?
Behandle ich die Browserhistorie und das Rendering meiner Ansicht als separate Dinge und füge Code für 'Link geklickt, rendere' -Funktionalität in meine app.js-Datei ein (die Datei, in der ich alle meine Objekte instanziiere)? Wenn dies der Fall ist, wie weiß meine App, was zu rendern ist, wenn ein Benutzer versucht, direkt zu einer Ansicht zu gehen, indem er die URL eingibt, anstatt auf?
OR, und dies ist das wahrscheinlichste Szenario, soweit ich das beurteilen kann,
verwende ich die initialize Funktionen meiner Modelle/Ansichten, die ein Ereignis auslösen/listenTo für, wenn ein Link angeklickt wird (oder Backbone .history() wurde geändert?) und rendern rendern?
Ich habe mich mit allen drei Ansätzen herumgeschlagen, konnte aber nicht verstehen, wie man Referenzen von Objekten an andere Teile der App weitergibt, ohne diese Objekte zu globalen Variablen zu machen (was sich so falsch anfühlt). Für das letzte Szenario habe ich mich mit Ereignissen herumgesprochen, aber überall wo ich gelesen habe, muss man einen Verweis auf das Objekt, das es auch hört, einfügen, was den ganzen Zweck des Einrichtens eines Ereignisobjekts und des Zuhörens zunichte zu machen scheint für ein Ereignis, anstatt nur den Zustand einer Variablen dieses Objekts abzufragen ...
z.
this.listenTo(sidebarModel , "change:selected", this.render());
Wie gebe ich einen Verweis auf sidebarModel Objekt zu der Ansicht singleScreen für sie zu wissen, was es bedeutet, zu hören zu sein.
Ich bin nicht wirklich auf der Suche nach einer codierten Antwort, mehr nur ein Verständnis für Best Practices und wie Dinge zu tun sind. Ich fühle mich wie ich bin nahe, aber ich weiß, ich vermisse/nicht etwas zu verstehen deshalb bin ich nicht in der Lage, das selbst herauszufinden, daher würde ich ein bisschen aufschlussreich über das ganze Thema sein. Vielen Dank.
Super, danke für die Erklärung. Ok, ich denke, was ich ausgehängt habe, ist die Tatsache, dass ich versuche, eine Instanz eines Objekts zu erstellen und es weiterzugeben, während es so aussieht, als ob Sie neue Instanzen erstellen und die als Parameter benötigten Werte übergeben würden . (und ich nehme an, bereinigen Sie die alte Instanz, wenn Sie nicht mehr benötigen.) Beispiel, wo Sie erstellen 'var model = new Buch ({code: code});' – MattyB
Um zu erklären, warum ich es aufgelegt habe weiter, mit der App, die ich zu versuchen und zu schaffen, Sie könnten es sich vorstellen, als wissend, dass Ihre Bibliothek immer nur 4 Bücher haben wird, und dass Sie alle Attributwerte für sie bereits kennen. Also habe ich versucht, diese 4 Bücher in meiner app.js gleich zu Beginn zu erstellen und dann Referenzen herumzugeben. Aber ich beginne zu verstehen, dass es am besten ist, eine neue Instanz eines Buchmodells mit den relevanten Daten zu erstellen. Das bedeutet, dass es nicht möglich ist, das DOM in etwas wie routes.js basierend auf Daten in meinem Buchmodell zu manipulieren. – MattyB
Ok, dann Frage, Wenn meine Ansicht Vorlage für BookPageView hatte einen Aufruf, um den Namen des Modells '<%= name %>', in Ihrem Beispiel, wie würde view.render(); in Ihren Routen haben Zugang zu diesen Informationen? Da das einzige, was Sie übergeben haben, ist der 'code' beim Erstellen einer neuen Instanz des zu rendernden Buchs. – MattyB