【问题标题】:How to access array within object in template Handlebars & Ember.js如何在模板 Handlebars 和 Ember.js 中访问对象内的数组
【发布时间】:2014-02-12 17:11:01
【问题描述】:

我正在尝试使用 ember.js 访问车把模板中以下 JSON 的“名称”属性,但似乎无法正常工作。

我将模型扩展如下:

    App.Post = DS.Model.extend({
      taxonomies : DS.attr();     
});

我的 JSON 看起来像这样:

{"taxonomies":{
    "positions":[
     {
        "name":"F",
     }
  ],
  "nhlteams":[
     {
        "name":"MTL",
     }
  ]
}}

在模板中:

<script type="text/x-handlebars" data-template-name="posts">
    <h1>Position Name: {{taxonomies.positions.0.name}}</h1>
    <h1>Team Name: {{taxonomies.nhlteams.0.name}}</h1>
</script> 

我也试过了:

<script type="text/x-handlebars" data-template-name="posts">
    <h1>Position Name: {{taxonomies.positions.name}}</h1>
    <h1>Team Name: {{taxonomies.nhlteams.name}}</h1>
</script> 

任何想法我可能做错了什么?

【问题讨论】:

    标签: ember.js ember-data handlebars.js


    【解决方案1】:

    您需要在taxonimiespositions 等之间创建hasMany 关系

    App.Post = DS.Model.extend({
      taxonomy: DS.belongsTo('taxonomy');     
    });
    
    App.Taxonomy = DS.Model.extend({
      positions : DS.hasMany('position');     
    });
    
    App.Position = DS.Model.extend({
      name: DS.attr()
    });
    

    那么你的 json 就需要采用这种格式

    {
      post:{
       taxonomy:1
      },
      taxonimies:[
        {
          id:1,
          positions:[1]
        }
      ],
      positions:[
        {
          id:1,
          name:"F"
        }
      ]
    }
    

    要查看有关 ember 数据如何期待 json 的更多信息,请参阅https://github.com/emberjs/data/blob/master/TRANSITION.md

    【讨论】:

    • 那么在这种情况下,你将如何通过 handlebars.js 调用 name?
    • 在这种情况下,假设 post 是我们当前的上下文,我会做{{taxonomy.positions.firstObject.name}}
    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2013-05-22
    • 1970-01-01
    • 2013-10-23
    相关资源
    最近更新 更多