6

我正在开发我的第一个 Ember 应用程序,并让它显示我想要的方式,路由从以下位置返回静态 JSON 对象model()

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"}]
  }]
}

现在我正在尝试重构以使用 Ember Data + Mirage 并且度过了一段糟糕的时光。

这是我的index.js路线

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

如果我这样设置 Mirage config.js

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

然后我得到这个错误:

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

如果我这样设置 Mirage config.js

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

然后我得到这个错误:

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"." "EmberError@http://localhost:4200/assets/vendor.js:25582:15

编辑:

所以这不是解决问题的方法,但它让我克服了这个问题。我放弃了 Pretender 并根据这个优秀的教程重新开始创建一个实际的 Rails 服务器:http: //emberigniter.com/modern-bridge-ember-and-rails-5-with-json-api/

我能够以这种方式做我想做的一切,如果我想让它成为一个生产应用程序,我离得更近了。

4

1 回答 1

4

所以问题是您实际上并没有遵守JSON API规范。您可以通过阅读 Mirage 的关于如何符合的页面来解决这个问题。

本质上,在调用的情况下,您需要在 JSON 响应的顶层返回一个对象GET /foo/1。您还需要将“元素”属性更改为“数据” GET /foo,这应该可以解决问题。目前还没有一种简单、可重复使用的方法来开箱即用地完成这个 Mirage。对于这两个问题,目前最好的办法是使用本期中提出的解决方案。

于 2015-09-03T17:12:04.717 回答