【问题标题】:Accessing Nested JSON in Ember Model在 Ember 模型中访问嵌套的 JSON
【发布时间】:2018-03-28 12:50:08
【问题描述】:

我正在尝试访问一个嵌套在我的模型中的特定 ID 以建立 belongsTo 关联。在我的模板中获得我需要的东西没有问题,但在我的模型中需要image_id。下面是我的 JSON 和当前模型。

{
  content: {
      title: 'Title',
      header: 'Header',
      image_id: 1
  }
  slug: 'slug',
  title: 'Welcome'
}

这是我目前的模型...

import DS from 'ember-data';

const { attr } = DS;

export default DS.Model.extend({
  content: attr(),
  title: attr('string'),
});

希望这是有道理的!谢谢!

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    我有类似的用例(主要是一个非常可变的设置参数,在 db 中存储为 json)并通过自定义转换解决了它:

    // myapp/transforms/json.js
    import DS from 'ember-data';
    
    // Converts stringified json coming from database (usually in table-field 'settings') to a POJO
    export default DS.Transform.extend({
        deserialize: function(serialized) {
            return JSON.parse(serialized);
        },
        serialize: function(deserialized) {
            return JSON.stringify(deserialized);
        }
    });
    
    //myapp/models/myModel.js
    import DS from 'ember-data';
    
    export default DS.Model.extend({
        title: DS.attr('string'),
        content: DS.attr('json')
    });
    

    然后在你的模板中你应该可以做到

    {{model.content.image_id}}
    

    或在控制器中

    let image_id = this.get('model.content.image_id');
    

    或在模型中

    this.get('content.image_id');
    

    【讨论】:

    • 我也会这样做,但我会跳过 json 转换。如果您没有为内容指定特定选项,内容将自动反序列化为您的对象
    • @acorncom 啊,如果我在模型中做一个简单的content: DS.attr('json'),我根本不需要转换吗?或者您是否只想跳过 tranforms/json.js 中的JSON.parse(serialized)? (我问这个只是为了更新我自己的知识)
    • 如果您执行content: DS.attr(),它应该与您的content: DS.attr('json') 和自定义转换相同
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多