【问题标题】:Working with Embedded Records and Ember Data使用嵌入式记录和 Ember 数据
【发布时间】:2015-06-03 14:01:05
【问题描述】:

我正在使用 Ember 和 Ember 数据,我从服务器返回的 JSON 包含一个嵌入式对象数组。我需要知道我做错了什么。我有一个 JSBin,代码如下:

http://emberjs.jsbin.com/faledu/6/edit?html,js,output

目前,我收到以下错误:

处理路由时出错:索引断言失败:Ember Data 需要一个数字或字符串来表示 objects 关系中的记录,而不是找到一个对象。如果这是一个多态关系,请指定一个type 键。如果这是一个嵌入式关系,请在序列化程序的 attrs 对象中包含 DS.EmbeddedRecordsMixin 并指定 objects 属性。错误:断言失败:Ember Data 需要一个数字或字符串来表示 objects 关系中的记录,而不是找到一个对象。如果这是一个多态关系,请指定一个type 键。如果这是嵌入关系,请在序列化程序的 attrs 对象中包含 DS.EmbeddedRecordsMixin 并指定 objects 属性。

我在我的序列化程序中使用 DS.EmbeddedRecordsMixin,但它似乎不起作用。如何将 JSON 与 Ember 数据一起使用?

【问题讨论】:

    标签: javascript json ember.js ember-data


    【解决方案1】:

    您可以添加自定义 array 转换以供 ember-data 使用,并通过消除对 EmbeddedRecordsMixin 等的需要来大大简化您的代码。

    http://emberjs.jsbin.com/warebi/1/edit

    这是我过去经常使用的数组转换:

    App.ArrayTransform = DS.Transform.extend({
      deserialize: function(serialized) {
        return (Ember.typeOf(serialized) === 'array') ? serialized : [];
      },
    
      serialize: function(deserialized) {
        var type = Ember.typeOf(deserialized);
        if (type === 'array') {
          return deserialized;
        } else if (type === 'string') {
          return deserialized.split(',').map(function(item) {
            return item.trim();
          });
        } else {
          return [];
        }
      }
    });
    

    但是,我要说的是,当涉及到结构时,你真的应该避免与 ember-data 发生争执。我试图强制执行极端情况,但最终做了比需要更多的工作。如果您不能修改您的 API 以使其更加“JSON API”友好,我会考虑寻找其他替代 ember-data 或考虑仅使用普通 AJAX 来处理类似于 Discourse 方法的事情。归根结底,我只是尝试确保您的 API 以侧面加载样式或使用 async 方法的两个单独请求工作。你的生活会轻松很多。

    "design": {
      "id": "1",
      "name": "test1",
      "description": "testing",
      "objects": [1, 2]
    },
    "objects": [
      {
        "id": 1,
        "name": "foo"
      },
      {
        "id": 2,
        "name": "bar"
      }
    ]
    

    这是一篇旧博文,但如果您的用例需要在 ember-data 快乐路径之外运行,则主要概念仍然适用 - http://eviltrout.com/2013/03/23/ember-without-data.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2014-08-05
      • 1970-01-01
      相关资源
      最近更新 更多