我正在尝试从远程后端api获取数据。当我按照文档(https://guides.emberjs.com/v2.2.0/models/customizing-adapters/)进行操作时,“JSONAPIAdapter非常智能,可以根据模型的名称确定与之通信的URL。”所以我生成了Route,Model和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();
}
})
});
模型的代码
//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({
poster_path: attr('string'),
adult: attr('boolean'),
overview: attr('string'),
release_date: attr('string'),
genre_ids: attr('array'),
original_title: attr('string'),
original_language: attr('string'),
title: attr('string'),
backdrop_path: attr('string'),
popularity: attr('number'),
vote_count: attr('number'),
video: attr('boolean'),
vote_average: attr('number')
});
该应用的路由器:
//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;
路线的代码:
//app/routes/movies.js
import Ember from 'ember';
import Movie from 'search-movies/models/movie';
export default Ember.Route.extend({
model() {
return this.store.findAll('movie');
}
});
但如果我运行应用程序,我会收到错误404:
Error while processing route: movies Ember Data Request GET /movies returned a 404
我猜,商店服务无法获得模型。但为什么?我已经生成了适配器。我需要将它导入某个地方吗?或者是什么?为什么这个结构不起作用?需要帮助。
答案 0 :(得分:0)
您将适配器放在app/adapters/app.js
下,但应用适配器应位于app/adapters/application.js
或app/application/adapter.js
下。
由于您的适配器似乎特定于movie
模型,我会考虑将其作为特定于模型的适配器放在app/adapters/movie.js
或app/movie/adapter.js
下。