2016-04-27 2 views
0

Je rencontre des problèmes lors du chargement d'une relation belongsTo - aucune erreur ne s'affiche et aucune demande n'est envoyée. L'interface utilisateur reste simplement vide. Étant donné les modèles suivants:Erreur lors du chargement de la relation belongsTo dans Ember 2

project.js importer DS depuis 'ember-data';

export default DS.Model.extend({ 
    name: DS.attr(), 
    items: DS.hasMany('line-item', {async: true}), 
    customer: DS.belongsTo('customer', {async: false}) 
}); 

customer.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    name: DS.attr(), 
    email: DS.attr(), 
    projects: DS.hasMany('project', {async: true}) 
}); 

La relation entre projet et client existe. Lorsque vous accédez au point final de projets, le projet est correctement retourné:

{ 
    "data":{ 
     "type":"projects", 
     "id":"3861b834-e270-4296-b7be-9aca55676874", 
     "attributes":{ 
     "created":"2016-04-27T22:36:01.061349Z", 
     "modified":"2016-04-27T22:36:01.061477Z", 
     "name":"Sample name", 
     }, 
     "relationships":{ 
     "customer":{ 
      "data":{ 
       "type":"customers", 
       "id":"9242bd41-6bb0-41ed-b5f3-21df26486d9e" 
      } 
     }, 
     "items":{ 
      "meta":{ 
       "count":0 
      }, 
      "data":[ 

      ] 
     } 
     } 
    } 
} 

Cependant lorsque vous essayez d'accéder au client, rien ne se passe (rien je veux dire: pas de sortie de la console, aucune demande aux clients finaux, etc. L'interface utilisateur juste ne peut pas charger):

this.get('project').get('customer'); 

L'accès aux autres attributs fonctionne (y compris les éléments du projet).

Une idée de l'endroit où je vais mal?

+0

Je crois, puisque la relation est async, le get retourne une promesse. 'project.get ('client'). puis ((client) => { // maintenant nous pouvons travailler avec le client });' – snewcomer

+0

Merci snew. Malheureusement, cela ne fonctionne pas - le problème semble être 'project.get ('client')' - c'est là qu'il échoue. – JB2

+0

La valeur de retour est-elle indéfinie ou en fait quelque chose? – snewcomer

Répondre

2

Dans votre modèle project, vous avez défini customer comme async: false, ce qui signifie qu'il doit être fourni lors du chargement des projets à partir de votre serveur. À partir de la sortie json que vous avez fournie, les données client sont manquantes.

Donc, soit inclure le dossier customer lors du retour du JSON de votre serveur ou faire le client async: true, donc il va se charger lorsque vous appelez project.get('customer')