2016-04-18 6 views
2

Ich habe zwei Modelle, die wie folgt aussehen:Ember Modell Beziehung nicht API passende

// models/database.js 
export default DS.Model.extend({ 
    title: DS.attr(), 
    /*...*/ 
    documents: DS.hasMany('document') 
}); 

// models/document.js 
export default DS.model.extend({ 
    name: DS.attr(), 
    /*...*/ 
    database: DS.belongsTo('database') 
}); 

Ist haben auch einige Routen

Router.map(function() { 
    this.route('databases', function() { 
    this.route('database', { path: ":database_id" }, function() { 
     this.route('documents'); 
    }); 
    }); 
}); 

Wenn ich rufe /database/[ID]/Dokumente wenn ich nichts bekommen habe.

Ich denke, das Problem ist, dass ich mit einer JSON HAL API arbeite und wenn ich nach Datenbanken auf API frage, empfange ich diese Art von Antwort.

{ 
"_embedded": { 
    "databases": [ 
     { 
      "_links": { 
       "self": { 
        "href": "<API_URL>/databases/7ec39267b544424c/", 
        "reference": "7ec39267b544424c", 
        "title": "00000006" 
       } 
      }, 
      "database": { 
       "name": "00000006", 
       "reference": "7ec39267b544424c", 
       "title": "****" 
      } 
     }, 
     { 
      "_links": { 
       "self": { 
        "href": "<API_URL>/databases/aace19af004144a4/", 
        "reference": "aace19af004144a4", 
        "title": "00000007" 
       } 
      }, 
      "database": { 
       "name": "00000007", 
       "reference": "aace19af004144a4", 
       "title": "******" 
      } 
     } 
    }] 
} 

Wie Sie keine Dokumente sehen können gibt Attribute auf JSON zurückgegeben. Wenn ich eine Datenbank der Dokumente will muss ich [API_URL]/Datenbanken/[ID]/domains/[ID]/Dokumente

Es gibt noch eine Möglichkeit, Dokumente durch Angabe einer Datenbank zu verknüpfen nennen, dass die Dokumente können unter dieser URL wiederhergestellt werden (/databases/[ID]/domains/[ID]/Dokumente)?

Antwort

0

Ich denke, was Sie suchen, ist ein HAL API zu JSON API Konverter. Um dies selbst zu vermeiden, würde ich das Ember-Plugin http://github.com/201-created/ember-data-hal-9000 empfehlen, mit dem ich Ember Data verwendet habe, um mit Spring Boot gut zu spielen.

Wenn Sie ein einfaches Beispiel sehen wollten, ist hier meine client-side und server-side Demo-App.

Außerdem, wenn Sie neugierig waren, was Ember und JSON API nicht HAL verwenden, können Sie hier JSON API - FAQ on HAL lesen.

+0

Ich benutze bereits ember-data-hal-9000, aber es hilft mir nicht. – KillertO

+0

Eric, könnten Sie ein Beispiel mit ember-data-hal-9000 mit der aktuellen Version von ember zeigen? –

0

Ich fand die Lösung.

Ich habe überschreiben extractRelationships Methode in hal Serializer wie folgt aus:

extractRelationships(modelClass, resourceHash, included) { 
    resourceHash._links["documents"] = { 
     "href" : "/databases/" + resourceHash.id + "/domains/" + (resourceHash.name || resourceHash[modelClass.modelName].name) + "/documents/" 
    }; 
    return this._super(modelClass, resourceHash, included); 
} 

ich nur hinzufügen, einen Link zu den Dokumenten für die einzelnen Datenbanken, die von der API zurückgegeben.

Ich habe meine Route für Dokumente modifizierte wie diese

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    model() { 
     return this.modelFor('databases.database').get('documents'); 
    } 
}); 

Und jetzt funktioniert es perfekt.

Verwandte Themen