Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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数据版本中使用RESTSerializer格式化JSON_Javascript_Json_Serialization_Ember.js_Ember Data - Fatal编程技术网

Javascript 在最新的Ember数据版本中使用RESTSerializer格式化JSON

Javascript 在最新的Ember数据版本中使用RESTSerializer格式化JSON,javascript,json,serialization,ember.js,ember-data,Javascript,Json,Serialization,Ember.js,Ember Data,我正在努力将我的JSON“咀嚼”成正确的格式 为了说明这一点,我做了一个快速的JSfiddle 服务器返回数据的格式与Ember data现在推荐的首选格式有一些不同 以下是原始JSON输出 { "video": { "uuid": "8a660002-03c6-4b8e-bd8b-4ce28fa0dacd", "state": "pending", "theme": "basic", "resolution": "nHD

我正在努力将我的JSON“咀嚼”成正确的格式

为了说明这一点,我做了一个快速的JSfiddle

服务器返回数据的格式与Ember data现在推荐的首选格式有一些不同

以下是原始JSON输出

{
    "video": {
        "uuid": "8a660002-03c6-4b8e-bd8b-4ce28fa0dacd",
        "state": "pending",
        "theme": "basic",
        "resolution": "nHD",
        "title": "Test title",
        "track": {
            "uuid": "376fc3bb-d703-49e7-9d92-bce7f6bf8b56",
            "state": "complete",
            "source": "upload"
        }
    }
}
首先,它使用的是一个字符串UUID,而不是使用ID

我似乎已经设法用normalizeHash解决了这个问题,至少对视频来说是这样——但我不确定同样的方法是否也能解决轨迹模型——特别是如果我需要使用嵌入的话

这就是大问题开始出现的地方,如果我从视频模型中注释掉belongsTo关系,那么它工作正常,所以我认为。。。这显然是嵌入式轨迹数据的JSON格式问题

以下是模型定义和序列化

App.Video = DS.Model.extend({
  title: DS.attr('string'),
  //track: DS.belongsTo('track', { embedded: true })
});

App.VideoSerializer = DS.RESTSerializer.extend({
    normalizeHash: {
        video: function(hash) {
            hash.id = hash.uuid;
            delete hash.uuid;
            return hash;
        }
    }
});
对于如何将此响应格式化为余烬数据能够识别的格式,我非常感谢您的建议

还有-有人知道调试这些序列化转换的工具或好方法吗?因为目前来自Ember的错误消息在调试或查看序列化输出方面没有太大帮助

非常感谢你能提供的任何帮助


Chris

如果其他人对序列化有同样的困惑,我想我应该包括一个如何解决这个问题的解释

以下是工作jsbin:

要点是:

主键

primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
将id转换为正确的命名很有用&需要显式地应用于任何序列化程序(在ApplicationSerializer上全局使用似乎不起作用)

模型关系

primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
确保关系的定义包括嵌入&仅在一侧嵌入

提取单个

extractSingle: function(store, type, payload, id, requestType) {
    var tracks = [];
    var track = payload.video.track;
    var video = payload.video;

    tracks.push(track);

    video.track = payload.video.track.uuid;

    payload = { video: video, track: tracks };

    return this._super(store, type, payload, id, requestType);
}
多元化对于余烬数据理解关系非常重要,即使模型关系是一种归属关系

您可以在所需的(工作)JSON中清楚地看到这一点

视频中的轨迹值不是包装在数组中,而根轨迹值数组

出于这个原因,我发现它非常有用,首先定义所需的JSON并测试它是否工作,然后尝试将真正的JSON转换为该格式


我认为有一个工具可以帮助完成这一过程(可视化seraliziation的实时JSON输出),这可能是对Ember数据的一个很好的补充&我将研究如何创建这些数据。

如果其他人对序列化有同样的困惑,我想我应该包括一个如何解决这个问题的解释

以下是工作jsbin:

要点是:

主键

primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
将id转换为正确的命名很有用&需要显式地应用于任何序列化程序(在ApplicationSerializer上全局使用似乎不起作用)

模型关系

primaryKey: 'uuid'
track: DS.belongsTo('track', {embedded: true} )
确保关系的定义包括嵌入&仅在一侧嵌入

提取单个

extractSingle: function(store, type, payload, id, requestType) {
    var tracks = [];
    var track = payload.video.track;
    var video = payload.video;

    tracks.push(track);

    video.track = payload.video.track.uuid;

    payload = { video: video, track: tracks };

    return this._super(store, type, payload, id, requestType);
}
多元化对于余烬数据理解关系非常重要,即使模型关系是一种归属关系

您可以在所需的(工作)JSON中清楚地看到这一点

视频中的轨迹值不是包装在数组中,而根轨迹值数组

出于这个原因,我发现它非常有用,首先定义所需的JSON并测试它是否工作,然后尝试将真正的JSON转换为该格式

我认为有一个工具可以帮助完成这一过程(可视化seraliziation的实时JSON输出),这可能是对Ember数据的一个很好的补充&我将研究如何创建这些数据