2016-04-16 9 views
0

Lassen Sie mich sagen, dass ich ein Feature zur Behandlung von Entity Historic entwickeln möchte. Beim Abrufen historischer Einträge könnte jeder historische Eintrag an eine Anwendungsmodelleinheit gebunden sein.Ember Data - Polymorphe Beziehung zu einem beliebigen Typ

Um zu vermeiden, ein generisches historisches Modell zu erstellen und alle Modelle in der Anwendung zu erweitern, wie könnte ich den Polymorphismus erreichen?

//models/historicentry 
export default DS.Model.extend({ 
    entity:DS.belongsTo('????', {polymorphic:true}) 
    ... 
}); 

//models/post 
export default DS.Model.extend({ 
... 
}} 

//models/comment 
export default DS.Model.extend({ 
... 
}} 

In diesem Beispiel, wie ein Beitrag oder ein Kommentar ermöglichen, die damit verbundene Art des Entity-Relationship im historicentry Modell seines whitout der Post und Kommentar Modelle Refactoring?

Mit JSONAPI, wobei die Anforderung der historischen zu holen ist

//GET /historic 
{ 
    "data":[ 
     { 
      "type":"historics", 
      "id":1, 
      "attributes":{ ... } 
      "relationships":{ 
       "entity":{"data":{"id":1, "type":"posts"}} 
      } 
     }, 
     { 
      "type":"historics", 
      "id":1, 
      "attributes":{ ... } 
      "relationships":{ 
       "entity":{"data":{"id":1, "type":"comments"}} 
      } 
     } 
    ] 
} 
+0

Ich empfehle nicht, Polymorphismus in Ember Data zu verwenden. Wenn du fertig bist, wird dein verbleibendes Haar silbrig weiß sein. –

+0

Verdammt! Ich bin schon fett: -/ – Fiftoine

Antwort

1

Sie haben ein gemeinsames Basismodell verwenden! Ich denke nicht, dass es ohne geht.

Nun könnten Sie versuchen, DS.Model direkt zu verwenden. Vielleicht können Sie mit export default DS.Model; ohne extend in eine Datei base.js exportieren und dann verwenden belongsTo('base', ...) Aber ich habe dies noch nicht versucht. Sieht wie ein hässlicher Hack aus, wenn es funktioniert.

+0

Es ist hässlich wie du sagst aber es funktioniert. Danke @Lux – Fiftoine