2017-04-10 5 views
1

Ich bin ein bisschen neu zu Ember, also bitte vergib mir, wenn diese Frage mein allgemeines Unverständnis des Rahmens beleuchtet.Ember hasMany mit mehreren Modellen

Im Grunde versuche ich Contentful mit Ember zu verwenden. Ich habe dieses Addon gefunden, das es scheinbar einfach macht https://github.com/davidpett/ember-data-contentful.

Allerdings stoße ich auf ein Problem, das mich wirklich frustriert. Ich habe einen Inhaltstyp, der ein "viele Referenz" -Feld hat, der es einem Benutzer ermöglicht, auf viele verschiedene Inhaltstypen zu verweisen. Im Wesentlichen habe ich ein Feld "Module", das ein Array aus mehreren verschiedenen Modulen sein wird. Jedes Modul wird im Grunde ein eigenes Modell sein.

In ember

modules: hasMany('module')

Aber module kann eine von vielen verschiedenen Modellen sein, vorausgesetzt, es ist ein Modell sein muss, die jeden Inhaltstyp entspricht.

Ich habe bereits eine Frage hier gestellt:aber haben es nicht geschafft, dies funktioniert noch nicht.

Antwort

2

Um dies zu lösen, müssten Sie jedes Ihrer Modelle von einem Basismodell erben, das die Contentful-Systemmetadateneigenschaften implementiert. Sie sind in der Eigenschaft sys in der JSON-Antwort gefunden.

Sie könnten dieses Basismodell dann abhängig vom Inhaltstyp des Basismodells auf das spezifische Modell erweitern, das diesem Inhaltstyp entsprechen würde.

Ich weiß, dass Sie versuchen, etwas Ähnliches in dem von Ihnen geposteten Thema zu tun. Ich denke, das Problem, auf das Sie stoßen, ist, dass Sie keine contentType-Eigenschaft für Ihre Basisklasse haben.

+0

Danke! Das Problem ist, dass das Basismodell, welches Modul erweitert wird, eine Eigenschaft namens contentType hat: -/https://github.com/davidpett/ember-data-contentful/blob/master/addon/models/contentful.js – morrisbret

+0

Ich sehe, wie ist das bevölkert obwohl? Ich nehme an, es gibt irgendwo einen Adapter, der die Eigenschaft sys.contentType.sys.id dort einfügt? – Robban

+0

Das ist richtig Robban vielleicht das: https: // github.com/davidpett/ember-data-contentful/blob/master/addon/adapter/contentful.js – morrisbret

0

Nun, ich habe keine Ahnung von zufrieden.

Mein Team hat diese Art von dynamischen Typen lösen, indem berechnet mit spezifischem Modell manuell beantragen. Da wir keinen besseren Weg gefunden haben, Ember-Daten in hasMany mehrere Modelle zu unterstützen. Und es funktioniert wirklich gut.
Für die Stapelabfrage müssen Sie möglicherweise die Stapelanforderungs-Minimierungsmethode implementieren, um die Leistung zu verbessern.

Eine andere Idee ist, ersetzen Sie hasMany mit DS.attr() als kein Typ. Und versuchen Sie, ob Sie diese Module "pumpen" können, und passen Sie Ihre Modulmodelle manuell an Ihre model.modules in adapter an. Dies funktioniert möglicherweise nicht oder funktioniert nur bei GET-Anfragen.
Oder passen Sie einfach die Namen/ID des Nutzlastmodells an Ihre model.modules an, und verwenden Sie computed, um den richtigen Datensatz zu sehen und zum Modell zu mounten.

+0

Können Sie ein Code-Snippet bereitstellen, das Sie verwenden, um bestimmte Modelle manuell anzufordern? Nicht sicher, wie man das machen würde. Danke! – morrisbret

0

Es stellte sich heraus, gab es ein Problem mit der Ember-Data-Contentful-Lib. Downgrade auf Version 0.2.1 löst das Problem vorerst. Der Autor ist sich des Fehlers bewusst und sucht nach einer Lösung für eine zukünftige Version. Danke allen für ihre Hilfe!

Verwandte Themen