Ich versuche herauszufinden, was der richtige Ember.js-Weg wäre, um dieses Projekt zu modellieren, z. Welche Modelle, Routen und Controller wären erforderlich? Ich habe eine jsBin gestartet, um von zu arbeiten.
Meine Anforderungen können sicher reduziert werden auf:
Artikel & amp; ihre Optionen
Dashboard
Navigation
Daten
Wie wäre das in Ember strukturiert?
Ich habe versucht, das einmal selbst zu machen, aber es war mein erster Versuch, und ich endete mit einem ziemlich hässlichen Setup. Ich würde gerne sehen, wie jemand mit Ember-Erfahrung sich dem nähern würde:
jsBin Mockup ( Link )
Ich habe eine Reihe von Lenkerschablonen erstellt, aber ich habe noch nicht einmal daran gedacht, welche Modelle existieren sollten und welche Controller benötigt werden.
Json
%Vor%Ich habe einen kleinen JSBin Ссылка
aufgestelltOkay, nach einem Gespräch und ein bisschen längerem Blick, hier sind meine Gedanken, wie man das vereinfacht:
Sie haben nur eine URL, daher würde ich für jetzt nur eine Route und einen Controller verwenden.
Das Datenmodell ist ziemlich einfach, weil es vollständig hierarchisch ist:
a Anzeige hat viele Elemente , Ein Objekt hat viele Optionen
Und weil Sie immer nur ein Display gleichzeitig betrachten, brauchen Sie das Display als Modell überhaupt nicht. Wenn sich Ihre Anwendung weiterentwickelt und Sie mehrere Anzeigen gleichzeitig haben, ist es sinnvoll, ein Anzeigemodell zu implementieren und alle JSON-Anforderungen über dieses Modell auszuführen.
Ich würde eine einzelne Route und einen Controller implementieren:
%Vor%Der DisplayController hat vollen Zugriff auf alle Items, da sie als Model eingestellt sind.
Ich denke, Sie brauchen nur eine Vorlage für den Moment, Sie können diese später in mehrere Teiltöne aufteilen, wenn sie außer Kontrolle geraten.
%Vor%Beachten Sie die selectOption-Aktion: Wenn Sie diese Option aufrufen und die Option übergeben, können Sie den ausgewählten Status direkt in der Option selbst festlegen, was sich sofort in der Ansicht widerspiegelt.
%Vor%Um die Elemente vom Server zu erhalten, können Sie App.Item.find () aufrufen und dann die ID des Bildschirms übergeben. Das ist nicht 100% konventionell, da man erwarten würde, die ID des Items hier zu übergeben, aber ich denke, zu diesem Zweck ist es in Ordnung. also würde diese Methode ungefähr wie
aussehen %Vor%Ich hoffe, das hilft dir beim Einstieg und macht es vielleicht ein wenig einfacher, dein Konzept auf Ember zu übertragen. Wenn Sie Fragen haben, wie Sie zum Beispiel alles auf den Server speichern können, schießen Sie:)
Hier ist der Anfang einer Antwort:
Modelle
Ich denke, ich brauche nur drei Modelle hier. Das Dashboard ist ein wichtiger Spieler in dieser App, aber es hat keine eigenen Daten.
Controller
Früher habe ich das Konzept von ArrayControllern völlig vermisst. Im Allgemeinen benötigt alles, was eine Sammlung ist, einen ArrayController, um es darzustellen, und nicht einen einfachen ObjectController. Meine 'Items' benötigen einen, aber ich denke nicht, dass 'Optionen' funktionieren, da Optionen untergeordnete Elemente von Item sind und Item / Items als Proxy verwenden können.
Vorlagen
Der Einzug stellt hier Vorlagen dar, die andere Vorlagen rendern. Zum Beispiel enthält meine Anzeigevorlage {{render dashboard}}
und {{render items}}
.
Routen
Das ist immer noch sehr verschwommen. Routen scheinen viele Rollen zu spielen (URLs zu Modellen zuordnen, Modelle für Controller setzen, vielleicht andere Sachen?). Im Moment ist die einzige URL, an die ich denken kann:
Andere Routen:
setupController
: setzt den Controller auf eine leere / gespeicherte Anzeige redirect
: Leitet nur zur Anzeige Route (im Wesentlichen der Stamm der App) model
: Setzt eine gegebene Anzeige als Modell afterModel
: Lade die auf dem Display angegebenen Elemente Ich denke, das ist alles. Dies ist eine einfache App und sobald ich die Elemente für eine Anzeige geladen habe, ändert die App nur die Anzeige für den Bildschirm. Es gibt Benutzerauswahlen, aber sie sind boolesche Flags (z. B. die Einstellung isAusgewählt für ein Item sollte die vom Dashboard angezeigten Daten ändern) - diese Auswahlen erfordern keine Navigation.
Tags und Links javascript architecture ember.js