0

バージョン 1.0 beta までの ember データには多くの変更があるようです。すべてがバージョン 0.13 で問題なく動作します。今私はより高いバージョンにアップデートしたい。私の場合、埋め込みモデル「ユーザー」があります

    App.Post = DS.Model.extend({
          subject: DS.attr('string'),
          created: DS.attr('number'),
          fcreated: function(){
              debugger;
              var d =  new Date(this.get('created'));
              return d.toLocaleDateString();
          }.property('created'),

          reporter: DS.belongsTo('user')
}

App.ApplicationAdapter = DS.RESTAdapter.extend({
    namespace: 'restws'
});

サーバーからのJsonは次のようになります。

   {
    "posts": [
      {
       "id": "5226f2670364e70ae7d77266",
       "subject": "Text",
       "created": 1325410935048,
       "reporter": {
               "id": "5226f2660364e70ae7d771e2",
               "firstName": "Doris",
               "lastName": "Baumertr"
       }
  }

「Uncaught TypeError: メソッド 'toString' の undefined を呼び出せません」というエラー コードが表示されます。私が見るemberソースコードでは、ember-data.js行2236で関数がエラー「buildRecord: function(type, id, data) ..」をスローすることがわかりますデバッグ後、プロパティタイプが未定義であることがわかりますidが設定されています正しい ID とデータが定義されていませんか?

間違いは何ですか?埋め込みデータをマップするにはどうすればよいですか?

4

2 に答える 2

2

実際に実装する必要がある正確な extractSingle メソッドは次のとおりです

App.PostSerializer = DS.RESTSerializer.extend({
    extractSingle: function(store, type, payload, id, requestType) {
      if(typeof payload.post.reporter !== "undefined") {
        var reporter_id = payload.post.reporter.id;
        payload.users = [payload.post.reporter];
        payload.post.reporter = reporter_id;
      }
      return this._super.apply(this, arguments);
    }
});

ここにjsbin http://jsbin.com/EKItexU/1/edit?html,js,outputがあります

JSON を返すサーバーをエミュレートするには、RESTAdapter で ajax メソッドを再定義する必要があることに注意してください。

また、JSON でユーザーをサイドローディングしている場合は、ペイロード (payload.users プロパティ) でサイドローディングされたユーザーを上書きしないように、このメソッドを更新する必要があります。

于 2013-09-11T17:09:46.710 に答える
1

埋め込みレコードのサポートは(今のところ)なくなりました。

extractSingleJSON ペイロードを実装して再編成することで、埋め込みレコードを自分で処理できます。

移行の詳細については、https ://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records をお読みください。

それが役に立てば幸い。

于 2013-09-04T16:24:53.930 に答える