Ember:访问模板中的侧载模型关系数据

Posted

技术标签:

【中文标题】Ember:访问模板中的侧载模型关系数据【英文标题】:Ember: Access sideloaded model relationship data in template 【发布时间】:2016-01-25 16:13:16 【问题描述】:

我正在尝试根据侧载数据在模板中显示模型的关系,但似乎存在一些问题。使用 Ember Inspector,我看到关系是从数据中正确加载的。但是,数据并没有显示在页面上。

寻找有关从何处开始调试的解决方案或建议。非常感谢。

车把:

<dt>Categories</dt>
<dd>
  <ul>
    #each model.categories as |category| 
      <li> category.name </li>
    /each
  </ul>
</dd>

路线:

export default Ember.Route.extend(AuthenticatedRouteMixin, 
  model(params) 
    return this.store.findRecord('datasheet', params.id);
  
);

模型:

// app/models/datasheet.js
export default DS.Model.extend(
  name: DS.attr('string'),
  name_en: DS.attr('string'),
  news: DS.attr('string'),
  news_en: DS.attr('string'),
  basic_information: DS.attr('string'),
  basic_information_en: DS.attr('string'),
  id_gradient_default: DS.attr('string'),
  icon_name: DS.attr('string'),
  icon_color: DS.attr('string'),
  order: DS.attr('string'),
  item_count: DS.attr('string'),

  categories: DS.hasMany('category')
);

// app/models/category.js
export default DS.Model.extend(
  name: DS.attr('string')
);

这是从适配器方法返回的 JSON:


    "data": 
        "type": "datasheet",
        "id": "21",
        "attributes": 
            "name": "Projekty",
            "name_en": "Projects",
            "news": "",
            "news_en": "",
            "basic_information": "",
            "basic_information_en": "",
            "id_gradient_default": "27",
            "icon_name": "pin_flag",
            "icon_color": "",
            "order": "14"
        ,
        "relationships": 
            "categories": ["18", "19", "20", "51", "52"]
        
    ,
    "included": [
        "type": "category",
        "id": "18",
        "attributes": 
            "name": "Project"
        
    , 
        "type": "category",
        "id": "19",
        "attributes": 
            "name": "Activity"
        
    , 
        "type": "category",
        "id": "20",
        "attributes": 
            "name": "Project phase"
        
    , 
        "type": "category",
        "id": "51",
        "attributes": 
            "name": "Program"
        
    , 
        "type": "category",
        "id": "52",
        "attributes": 
            "name": "Milestone"
        
    ]

Ember Inspector 截图:

【问题讨论】:

试试这样定义categories: DS.hasMany('category', async: true, inverse: null) 抱歉,好像没有任何效果。 【参考方案1】:

这不是正确的 JSONAPI:

 "relationships": 
   "categories": ["18", "19", "20", "51", "52"]
 

这是正确的 JSONAPI 等效项:

"relationships": 
  "categories": 
    data: [
      id: '18',
      type: 'category'
    ,
      id: '19',
      type: 'category'
    ,
      id: '20',
      type: 'category'
    ,
      id: '51',
      type: 'category'
    ,
      id: '52',
      type: 'category'
    ]
  

因此您的数据已加载但未正确链接。当您检查 categories 关系时,您可以在 ember-inspector 中看到这一点。

【讨论】:

宾果游戏!谢谢,@Lux,你是英雄。

以上是关于Ember:访问模板中的侧载模型关系数据的主要内容,如果未能解决你的问题,请参考以下文章

Ember Docs - Readonly嵌套数据

ruby jsonapi_suite内存关联的侧载

为啥我的侧载 Excel Javascript 加载项在外部浏览器中打开,而不是在任务窗格中打开?

每次访问时,ember.js列表模板都会变得越来越大

Ember 在第一次请求后不按 id 请求模型

如何在 Ember JS 中获取模型数据