【问题标题】:Cannot get Rails REST API to work with Ember.js无法让 Rails REST API 与 Ember.js 一起使用
【发布时间】:2015-03-14 21:48:35
【问题描述】:

我正忙于学习 this Ember.js 教程,但我正在尝试使用 Ember 2.0 的处理方式(模块,使用 Ember CLI 和 ember-cli-rails gem)来实现它。这相当困难,因为没有任何 Ember 指南遵循这些约定。

按照教程,我将 Rails 用作 JSON API,看起来一切正常,就提供正确的 JSON 响应而言。问题是,我无法让我的leads 模型工作。

我收到来自ember.debug.jsTypeError: Cannot read property 'typeKey' of undefined 错误。我还收到来自ember.adapter.jsundefined is not a function 错误

我的项目如下:

app/store.js

  import DS from 'ember-data';

  export default DS.RESTAdapter.reopen({
    url: 'https://localhost:3000',
    namespace: 'api/1'
  });

app/router.js

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

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

Router.map(function() {
    this.resource('leads', { path: '/' });
});

export default Router;

app/adapters/application.js

import DS from "ember-data";

var ApplicationAdapter = DS.ActiveModelAdapter.extend({
    host: 'http://localhost:3000',
    namespace: 'api/v1'
});

export default ApplicationAdapter;

app/models/lead.js

import DS from 'ember-data';

export default DS.Model.extend({
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  email: DS.attr('string'),
  phone: DS.attr('string'),
  status: DS.attr('string', { defaultValue: 'new' }),
  notes: DS.attr('string'),
});

app/routes/leads.js

import Ember from 'ember';

export default Ember.Route.extend({
    model: function() { return this.store.find('lead') }
});

我没有看到任何对 Rails 的 HTTP 请求,所以我认为它甚至在尝试使用 API 之前就中断了。谁能指出我在这里做错了什么?

【问题讨论】:

  • 您在浏览器控制台中看到什么了吗?
  • 是的 - 从顶部开始的第三段列出了我在 Chrome 控制台中遇到的两个错误。
  • 据我所知,这段代码没有任何问题。你能在小提琴中重现问题吗?顺便说一句,您为什么要重新打开 RESTAdapter?这很危险。
  • 根据该教程,这是您在 store.js 中配置 Ember 数据的方式 - 使用重新打开。还有其他方法吗?我已将整个项目添加到此处的 Git 存储库:github.com/constantm/ember-crm/tree/master/frontend。我不知道如何让它与小提琴一起使用。 :)

标签: ruby-on-rails ember.js ember-data


【解决方案1】:

看起来问题是 store.js,不应该在这里使用。不知道为什么,但删除它会导致一切正常工作。

更新:因此,在了解了 Ember 工作原理的更多信息后,我现在知道问题不在于文件,而是 Rails 返回错误类型的 json。 Ember REST 适配器期望 json 键使用下划线,例如。 first_name,而 Rails 以驼峰形式返回它,例如。 firstName.

要将 Ember 与 Rails 一起使用,您需要使用 ActiveModel 适配器。最新版本的 ActiveModelSerialisers(AMS) 支持 JSON API。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多