2015-08-27 22 views
5

Sto lavorando al mio primo Ember app e ottenuto per visualizzare il modo in cui ho voluto con il percorso che restituisce un oggetto JSON statica da model():Errore ritorno promessa da Ember dati

element: { 
    name: "First Element", 
    divisions: [{ 
    name: "First Division", 
    sets: [{name: "Set 1"},{name: "Set 2"},{name: "Set 3"}] 
    }, { 
    name: "Second Division", 
    sets: [{name: "Set 1"},{name: "Set 2"},{name: "Set 3"}] 
    }] 
} 

Ora sto cercando di refactoring usare Ember Data + Mirage e avere un tempo terribile.

Ecco la mia index.js percorso

export default Ember.Route.extend({ 
    model() { 
     return this.store.find('element', 1); 
    }, 

Se ho impostato il mio Mirage config.js in questo modo:

this.get('/elements', function() { 
    return { 
     elements: [ 
      { 
      id: 1, 
      name: 'First Element', 
      divisions: [1, 2] 
      } 
     ] 
    } 
    }); 

allora ottengo questo errore:

Your Ember app tried to GET '/elements/1', but there was no route defined to handle this request. 

Se ho impostato il mio Mirage config.js come questo:

this.get('/elements/1', function() { 
    return { 
     id: 1, 
     name: 'First Element', 
     divisions: [1, 2] 
    } 
    }); 

allora ottengo questo errore:

22:46:40.883 "Error while processing route: index" "Assertion Failed: normalizeResponse must return a valid JSON API document: 
    * One or more of the following keys must be present: "data", "errors", "meta"." "[email protected]://localhost:4200/assets/vendor.js:25582:15 

EDIT:

Quindi questa non è una soluzione al problema come detto ma mi ha passato questo. Ho rinunciato a Pretender e ho ricominciato a creare un vero server Rails in base a questo eccellente tutorial: http://emberigniter.com/modern-bridge-ember-and-rails-5-with-json-api/

Sono riuscito a fare tutto ciò che volevo in questo modo e se mai volessi fare un'app di produzione, sono un molto più vicino

+0

La risposta API sembra non essere valida per i dati ember. Puoi aggiornare il tuo post con ciò che il tuo server invia? Ember-data si aspetta che i dati siano formattati come descritto qui: http://guides.emberjs.com/v2.0.0/models/connecting-to-an-http-server/ –

+0

Puoi mostrare il tuo router? Probabilmente ti manca una rotta – QuantumLicht

+0

Quello che succede qui è che ho un singolo elemento (in questo momento) che contiene molte divisioni, ognuna delle quali contiene molti set. Quando ho avuto questo lavoro con l'oggetto JSON statico, ho usato {{#each nel mio modello .hbs per elencare ogni divisione, e all'interno di quella divisione ogni set. Quindi il modello per il mio modello è un elemento. – ed94133

risposta

3

Quindi il problema è che in realtà non si sta aderendo alla specifica JSON API. Puoi risolvere questo problema leggendo la pagina di Mirage su how to conform.

In sostanza, è necessario restituire un oggetto al livello più alto della risposta JSON nel caso di una chiamata GET /foo/1. Dovrai anche modificare l'attributo "elements" in "data" per GET /foo e questo dovrebbe fare la differenza. Al momento non c'è un modo semplice e riutilizzabile per fare questo Mirage fuori dagli schemi. La migliore scommessa in questo momento per entrambi i problemi è di utilizzare la soluzione presentata in questo issue.