Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember data 1.0 beta版如何映射嵌入式数据_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript Ember data 1.0 beta版如何映射嵌入式数据

Javascript Ember data 1.0 beta版如何映射嵌入式数据,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,在1.0测试版之前,余烬数据似乎有很多变化。所有这些在0.13版本中都非常有效。现在我想更新到更高的版本。在我的例子中,我们有一个嵌入式模型“用户” App.Post = DS.Model.extend({ subject: DS.attr('string'), created: DS.attr('number'), fcreated: function(){ debugger;

在1.0测试版之前,余烬数据似乎有很多变化。所有这些在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"
       }
  }
我得到以下错误代码“UncaughtTypeError:无法调用未定义的”方法“toString”。在我看到的ember源代码中,在ember-data.js第2236行中,函数抛出错误“buildRecord:function(type,id,data)…”调试后,我看到属性类型为undefined,id设置为正确的id,数据为undefined


错在哪里?如何映射嵌入式数据?

对嵌入式记录的支持已经消失(目前)

通过实现
extractSingle
并重新组织JSON负载,您可以自己处理嵌入式记录

有关转换的更多信息,请阅读此处:


希望能有所帮助。

对嵌入式记录的支持已经消失(目前)

通过实现
extractSingle
并重新组织JSON负载,您可以自己处理嵌入式记录

有关转换的更多信息,请阅读此处:


希望能有所帮助。

这里是您需要实现的具体方法

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

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


另外,如果您是JSON中的侧加载用户,那么您必须更新此方法,以便它不会覆盖负载中的侧加载用户(payload.users属性)

这里实际上是您需要实现的单一方法

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

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


另外,如果您是JSON中的侧加载用户,则必须更新此方法,以便它不会覆盖负载中的侧加载用户(payload.users属性)

谢谢您的回答,但它不起作用。PostSerializer的函数'extractSingle'不会调用吗?怎么了?JSBin上没有样本吗?是的,这里也一样。不适合我。在DS.ActiveModelSerializerTanks中没有调用extractSingle以获取答案,但它不起作用。PostSerializer的函数'extractSingle'不会调用吗?怎么了?JSBin上没有样本吗?是的,这里也一样。不适合我。DS.ActiveModelSerializer中未调用extractSingle