Ember.js:使用JSONAPIAdapter从后端获取数据 - 不起作用

时间:2016-07-19 16:12:11

标签: model-view-controller ember.js adapter

我正在尝试从远程后端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

我猜,商店服务无法获得模型。但为什么?我已经生成了适配器。我需要将它导入某个地方吗?或者是什么?为什么这个结构不起作用?需要帮助。

1 个答案:

答案 0 :(得分:0)

您将适配器放在app/adapters/app.js下,但应用适配器应位于app/adapters/application.jsapp/application/adapter.js下。

由于您的适配器似乎特定于movie模型,我会考虑将其作为特定于模型的适配器放在app/adapters/movie.jsapp/movie/adapter.js下。