0

私のコードは非常に単純です (クライアント側):

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


Record.MainRoute = Ember.Route.extend({
    model: function () {
       var response = Record.Rank.find();
       console.log(response.get('name'));
       console.log(response);
       return Record.Rank.find();
    }
});

私のモデル:

Record.Rank = DS.Model.extend({
    id: DS.attr('integer'),
    rank: DS.attr('integer'),
    content: DS.attr('string')

});

RESTadapter を使用します。

Record.Store = DS.Store.extend({
   revision: 12,

    adapter: DS.RESTAdapter.reopen({
        namespace: 'recordApp'
    })

});

私のサーバー側コード (PHP):

<?php

    namespace RecordContainer;

    echo '{"rank":
                 {
                    "id": "1",
                    "rank": "2",
                     "content": "walla"
                  }
          }';

発行後に何かを期待していますRecord.Rank.find()が、console.log(response.get('name'))ログは未定義で、2番目のログにconsole.log(response)は次のように表示されます。内部のサーバーからのエコーに関する情報はありません:

<code>console.log(応答)</code> の出力

Ember でサーバーからの応答を確認するにはどうすればよいですか?

4

1 に答える 1

2

1 つ目:findパラメータなしで DS.Model を呼び出すこと、つまり は、サーバーにリクエストをRecord.Rank.find()送信することと同じです。findAll()つまり、すべて Record.Rankをフェッチする必要があります。したがって、ember-data は、次の形式の応答で配列を想定しています。

{
  "ranks":[
    {
      "id": "1",
      "rank": "2",
      "content": "walla"
    },
    {
      "id": "2",
      "rank": "5",
      "content": "foo"
    }
  ]
}

2 番目: PHP からの応答が (上記のように) 正しかったとしても、要求がまだ完了しておらず、レコードが利用できないため、console.log(response.get('name'));おそらく返されます。undefinedストアにロードされたレコードに本当にアクセスしたい場合は、コードをPromise resolve コールバックに配置する必要があります。

Record.MainRoute = Ember.Route.extend({
    model: function () {
       var response = Record.Rank.find();
       response.then(function(ranks) {
         console.log(ranks.getEach('name'));
       });
       return response;
    }
});
于 2013-07-24T14:39:16.353 に答える