2017-03-16 1 views
1

J'apprends toujours ember.js et j'ai rencontré un barrage routier avec des données de braises ne résolvant pas les relations de recherche dans les modèles. J'ai un modèle de «site» qui sera essentiellement une table de recherche pour tous les autres modèles afin de différencier les données en fonction de l'emplacement.Ember Les relations de données ne sont pas résolues

A ce moment, je fais quelque chose de mal ou manque un concept clé - sans doute à la fois ... (ou peut-être est le wee heure!)

Modèle du site (la table de recherche)

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    code: DS.attr(), 
    name: DS.attr(), 
}); 

Le modèle de site aurait une relation hasMany à tous mes autres modèles (sera d'environ 12 lorsque vous avez terminé)

modèle associéLe 'modèle associé' sera également une recherche avec 'site' dans d'autres modèles. Je fournis des données via la spécification de l'API JSON, mais je n'inclue pas les données de relation car, si je comprends bien, les données du site doivent être extraites des données du site en utilisant l'attribut id du site.

{ 
    "links": { 
     "self": "/maint/associates" 
    }, 
    "data": [ 
     { 
      "type": "associate", 
      "id": "1", 
      "attributes": { 
       "site": "6", 
       "last": "Yoder", 
       "first": "Steven", 
       "active": "1" 
      }, 
      "links": { 
       "self": "/associates/1" 
      } 
     } 
    ] 
} 

Dans mon fichier modèle, je référence référencement.site qui me donne une erreur.

< (mixin inconnu): ember431>

Si je associate.code ou .name pour correspondre au modèle de site, rien ne montre dans le modèle. Le code de la table 'site' correspond aux données que je veux vraiment afficher dans le modèle.

Ainsi, les questions évidentes:

  1. Ai-je tort que Ember Les données doivent être résoudre ce ou dois-je inclure la relation dans ma réponse API?

  2. Je me rends compte que mon belongsTo dans le modèle « associé » fait référence uniquement le site alors que je veux site.code, alors comment puis-je faire de cette relation connu ou accéder au champ dans mon modèle « associé »?

  3. Je n'ai pas inclus la relation hasMany dans le modèle 'site' car il y en aurait beaucoup. Ai-je besoin de faire une relation inverse en autres modèles? Les exemples que j'ai vus ne montrent pas tous l'installation des relations hasMany .

  4. Lorsque je regarde les modèles dans l'inspecteur d'éléments de charpente, le champ de site n'est pas inclus dans le modèle. Même si je n'obtenais pas les bonnes données devrait-il encore apparaître?

J'aime Ember jusqu'à présent, juste besoin de comprendre et d'obtenir sur ce barrage routier

Mise à jour: Ma bibliothèque JSON back-end ne ferait que générer des liens de relation basée sur la spécification actuelle qui serait

"related": "/streams/1/site" 

, mais les données de Ember fait appel

"connexes": "/ sites/1"

pour résoudre la relation

Ainsi, @Adam Cooper réponse est correcte si vous générez des liens comme il a répondu ou si vous ne pouvez générer les liens basés sur la spécification actuelle.

Répondre

1

Si vous utilisez le JSONAPIAdapter, qui est la valeur par défaut, vous voulez que votre réponse à regarder ceci:

{ 
    "links": { 
    "self": "/maint/associates" 
    }, 
    "data": [{ 
    "type": "associate", 
    "id": "1", 
    "attributes": { 
     "last": "Yoder", 
     "first": "Steven", 
     "active": "1" 
    }, 
    relationships: {     
     "site": { 
     "links": { 
      related: "/sites/6" 
     } 
     } 
    } 
    }] 
} 

Cela permettra Ember des données pour rechercher le site via sa relation. En ce moment, Ember tente d'accéder au modèle de site que les données Ember ne peuvent pas remplir, d'où l'erreur que vous obtenez. En aparté, vous pourriez probablement faire avec renvoyer une valeur booléenne réelle pour actif aussi.

+0

J'ai besoin de regarder ma bibliothèque back-end pour déterminer comment changer le JSON match. – gmart

+0

Quelle bibliothèque backend utilisez-vous? Vous pourriez juste pouvoir passer à un adaptateur différent. –

+0

Désolé, appuyez sur Entrée trop tôt. backend php en utilisant jsonapi par lode pour générer, Slim pour le routage. jsonapi génère: "auto": "/ streams/1/relations/site" qui correspond à la spécification actuelle JSON api. A pris un peu pour ajouter un routage correct. Je veux marquer comme réponse parce que Ember demande maintenant des données mais que l'inspecteur de braises affiche un enregistrement avec des valeurs de champ nulles. Console montre enregistrement avec des valeurs en réponse, tout simplement pas se mettre en magasin. – gmart