2016-07-19 12 views
0

Ich versuche, Daten von Remote-Backend-API zu erhalten. Als ich den Dokumenten folgte, (https://guides.emberjs.com/v2.2.0/models/customizing-adapters/), "ist der JSONAPIAdapter intelligent genug, um die URLs zu bestimmen, mit denen er basierend auf dem Namen des Modells kommuniziert." Also habe ich die Route, das Model und den Adapter generiert.Ember.js: Daten von Back-End mit JSONAPIAdapter erhalten - funktioniert nicht

Hier ist der Code des Adapter:

//app/adapters/app.js 
 

 
import Ember from 'ember'; 
 
import JSONAPIAdapter from 'ember-data/adapters/json-api'; 
 
import JSONAPISerializer from 'ember-data/serializers/json-api'; 
 

 
export default JSONAPIAdapter.extend({ 
 
    ajax: Ember.inject.service(), 
 
    host: 'http://api.themoviedb.org/3/discover/movie', 
 
    headers: { 
 
    'API_KEY': '72b56103e43843412a992a8d64bf96e9' 
 
    }, 
 
    pathForType: function(type) { 
 
    return Ember.String.underscore(type); 
 
    }, 
 
    serializer: JSONAPISerializer.extend({ 
 
    primaryKey: 'id', 
 

 
    serializeId: function(id) { 
 
    return id.toString(); 
 
    } 
 
    }) 
 
});

Der Code des Modells

//app/models/movie.js 
 

 
import Model from 'ember-data/model'; 
 
import attr from 'ember-data/attr'; 
 
// import { belongsTo, hasMany } from 'ember-data/relationships'; 
 

 
export default Model.extend({ 
 
\t poster_path: attr('string'), 
 
\t adult: attr('boolean'), 
 
\t overview: attr('string'), 
 
\t release_date: attr('string'), 
 
\t genre_ids: attr('array'), 
 
\t original_title: attr('string'), 
 
\t original_language: attr('string'), 
 
\t title: attr('string'), 
 
\t backdrop_path: attr('string'), 
 
\t popularity: attr('number'), 
 
\t vote_count: attr('number'), 
 
\t video: attr('boolean'), 
 
\t vote_average: attr('number') 
 
});

Der Router der App:

//app/router.js 
 

 
import Ember from 'ember'; 
 
import config from './config/environment'; 
 

 
const Router = Ember.Router.extend({ 
 
    location: config.locationType 
 
}); 
 

 
Router.map(function() { 
 
    this.route('movies', { 
 
    path: '/' 
 
    }); 
 
}); 
 

 
export default Router;

Und der Code der Route:

//app/routes/movies.js 
 

 
import Ember from 'ember'; 
 
import Movie from 'search-movies/models/movie'; 
 

 
export default Ember.Route.extend({ 
 
\t model() { 
 
\t \t return this.store.findAll('movie'); 
 
\t } 
 
});

Aber wenn ich die app laufen lasse, erhalte ich die Fehler von 404:

Error while processing route: movies Ember Data Request GET /movies returned a 404

Ich denke, der Ladenservice e kann die Modelle nicht bekommen. Aber warum? Ich habe den Adapter generiert. Muss ich es irgendwo importieren? Oder was? Warum funktioniert diese Struktur nicht? Brauche Hilfe.

+0

Was ist die URL Ember versucht zu treffen und welche URL ist Ihr API-Endpunkt für Filme auf gehostet? –

+0

Ohne die URL zu sehen, die ember-data anfordert, würde ich vermuten, dass Ihr Host im Adapter falsch ist. Es sollte 'http: // api.themoviedb.org' sein. Glimmdaten sollten den Pfad erzeugen. Werfen Sie einen Blick auf Ihren Netzwerk-Tab, um zu sehen, was gerade passiert. – TuK

+0

Keiner dieser Code-Snippets kann ausgeführt werden, so dass der Post weniger lesbar ist. Ihre Einrückung war ein wenig schwer zu lesen. Wenn Sie sicherstellen können, dass es lesbar ist, werden Sie weniger Leute abprallen lassen. – sheriffderek

Antwort

0

Sie haben Ihren Adapter unter app/adapters/app.js gefunden, aber der Anwendungsadapter sollte unter app/adapters/application.js oder app/application/adapter.js liegen.

Da Ihr Adapter spezifisch für das movie Modell scheint, würde ich es als modellspezifischen Adapter unter app/adapters/movie.js oder app/movie/adapter.js platzieren.