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

So the issue is that you aren't actually adhering to the JSON API specification. You can solve this by reading Mirage's page on how to conform.

Essentially you need to either be returning an object at the top level of your JSON response in the case of a GET /foo/1 call. You'll also need to change your "elements" attribute to "data" for GET /foo and that should do the trick. Right now there isn't a simple, re-usable way to do this Mirage out of the box. The best bet right now for both issues is to use the solution presented in this issue.

于 2015-09-03T17:12:04.717 に答える