如何使用把手在ember模板中显示JSON嵌套数组

时间:2014-08-13 11:31:21

标签: json ember.js handlebars.js

我的服务器json api是

{  
   taxonomies:[  
      {  
         id:2,
         name:"Brand",
         root:{  
            id:2,
            name:"Brand",
            pretty_name:"Brand",
            permalink:"brand",
            parent_id:null,
            taxonomy_id:2,
            taxons:[  
               {  
                  id:8,
                  name:"Ruby",
                  pretty_name:"Brand -> Ruby",
                  permalink:"brand/ruby",
                  parent_id:2,
                  taxonomy_id:2
               },
               {  
                  id:9,
                  name:"Apache",
                  pretty_name:"Brand -> Apache",
                  permalink:"brand/apache",
                  parent_id:2,
                  taxonomy_id:2
               },
               {  
                  id:10,
                  name:"Spree",
                  pretty_name:"Brand -> Spree",
                  permalink:"brand/spree",
                  parent_id:2,
                  taxonomy_id:2
               },
               {  
                  id:11,
                  name:"Rails",
                  pretty_name:"Brand -> Rails",
                  permalink:"brand/rails",
                  parent_id:2,
                  taxonomy_id:2
               }
            ]
         }
      }
   ]
}

我希望显示分类单元 - >我的车把模板中的pretty_name

{{#each}}仅显示项目符号,但不显示数据

我不知道如何遍历数组。 {{taxonomy.root.taxons.firstObject.pretty_name}}显示名称,但只显示每个分类单元的第一个对象,而不是全部

<ul>
{{#each taxonomy in controller}}
{{#each}}
<li>{{taxonomy.root.taxons.pretty_name}}</li>
{{/each}}
{{/each}}
</ul>

如何获取数据?

1 个答案:

答案 0 :(得分:0)

您的JSON不符合Ember的JSON约定,如http://emberjs.com/guides/models/connecting-to-an-http-server/所述,详情请http://emberjs.com/api/data/classes/DS.RESTAdapter.html。这意味着您的选择是:

  1. 更改您的JSON API以返回与Ember数据约定一致的JSON
  2. 编写自己的Adapter DS.RESTAdapter,其中{{1}}读取您上面列出的JSON
  3. 对于选项1,只需修改您的服务器以返回符合上述约定的JSON。如果您可以这样做,这通常是最简单的方法。

    对于选项2,您需要基于每个模型或整个应用程序定义新的适配器。然后,您将要覆盖此功能:http://emberjs.com/api/data/classes/DS.RESTSerializer.html#method_extractArray

    请参阅该链接上的示例代码,了解如何执行此操作。