0

似乎 ember 数据在 1.0 beta 版之前有很多变化。一切都适用于 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"
       }
  }

我收到以下错误代码“未捕获的类型错误:无法调用未定义的方法“toString”。在我看到的 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

请注意,我必须在 RESTAdapter 中重新定义 ajax 方法来模拟服务器返回您的 JSON。

此外,如果您在 JSON 中侧载用户,则必须更新此方法,以免覆盖有效负载中的侧载用户(payload.users 属性)

于 2013-09-11T17:09:46.710 回答
1

对嵌入式记录的支持已经消失(暂时)

您可以通过实施extractSingle和重组 JSON 有效负载自己处理嵌入记录。

请在此处阅读有关过渡的更多信息:https ://github.com/emberjs/data/blob/master/TRANSITION.md#embedded-records

希望能帮助到你。

于 2013-09-04T16:24:53.930 回答