【问题标题】:Embedded models in Ember Data 1.0.0-beta.2Ember Data 1.0.0-beta.2 中的嵌入式模型
【发布时间】:2013-12-06 10:19:41
【问题描述】:

我目前正在处理简单的餐厅菜单,我从服务器收到以下 JSON:

[
  {
    "id": 251,
    "name": "Borsch",
    "category_id": 47,
    "price": "135.0",
    "photo": {
      "origin": "/path/to/origin.png",
      "resize": "/path/to/resize.png"
    }
  },
  // A lot of other dishes
]

如您所见,我有一个photo,它是一个复杂的对象。在 emberjs.com 上,他们建议为此使用嵌入式模型。好的,到目前为止一切顺利,我决定创建以下模型:

App.Dish = DS.Model.extend({
  name: DS.attr('string'),
  price: DS.attr('number'),
  category_id: DS.attr('number'),
  photo: DS.belongsTo('photo')
});

App.Photo = DS.Model.extend({
  origin: DS.attr('string'),
  resize: DS.attr('string')
});

但即使我添加了此代码也不起作用

DS.RESTAdapter.map('App.Dish',{
    photo: {
        embedded:'always'
    }
});

所以在那之后我用谷歌搜索了一下,然后this link 解释说他们不再支持嵌入式记录了。

经过一番思考,我决定将photo.origin 和photo.resize 带到 RESTSerializer 中 JSON 的顶层,现在我有了这个完全可用的模型:

App.Dish = DS.Model.extend({
  name: DS.attr('string'),
  price: DS.attr('number'),
  category_id: DS.attr('number'),
  photo_origin: DS.attr('string'),
  photo_resize: DS.attr('string')
});

这与 RESTSerializer JSON 略有不同:

{
  "dishes":
  [
    {
      "id": 251,
      "name": "Borsch",
      "category_id": 47,
      "price": "135.0",
      "photo_origin": "/path/to/origin.png",
      "photo_resize": "/path/to/resize.png"
      }
    },
    // A lot of other dishes
  ]
}

现在我有几个问题。我的方法可以接受吗?如果不是,我需要如何处理带有嵌套对象的复杂 JSON?如果是的话,我该如何处理一些更复杂的带有深度嵌套(如五级)对象的 JSON?为什么 ember 停止支持嵌入式模型?

【问题讨论】:

    标签: json ember.js ember-data


    【解决方案1】:

    您的关系与第一个示例中创建的关系类似,而不是嵌入值。

    现在我不知道您是否可以控制服务器的 JSON 输出,但通过使用关系,EmberJS 会期望您的 JSON 以这种方式构造(取决于您的 EmberData 适配器)。

    {
      dish: [{
        "id": 251,
        "name": "Borsch",
        "category_id": 47,
        "price": "135.0",
        "photos": [1]
      }],
      photo: [{
        "id": 1
        "origin": "/path/to/origin.png",
        "resize": "/path/to/resize.png"
      }] 
    }
    

    现在 Ember 将创建 Dish 和 Photo,并将它们绑定在一起。

    我认为这是正确的处理方式。

    【讨论】:

    • 哇,它真的有效!并且看起来更好一些,虽然需要对 JSON 进行更多处理。
    • @DaZzz 太棒了!如果它回答了您的问题,请记住接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多