如何从Ember.Handlebars.helper访问FIXTURES数据?

时间:2014-02-27 12:31:17

标签: ruby-on-rails ember.js helper fixtures handlebars.js

这就是我创建我的余烬FIXTURE的方式:

window.App = Ember.Application.create();

App.ApplicationAdapter = DS.FixtureAdapter;

App.Category = DS.Model.extend({
name: DS.attr(),
parent_id: DS.attr()
});

App.Category.FIXTURES = [
{
   id: 1,
   name: 'user1',
   email: 'user1@gmail.com',
   parent_id: 0
},
{
   id: 2,
   name: 'user2',
   email: 'user2@gmail.com',
   parent_id: 1
}
];

以下是我的余烬视图的一部分,其中'parent-title'是帮手:

{{#each category in controller}}
<tr>
  <td>{{category.name}}</td>
  <td>{{parent-title category.parent_id}}</td>
  <td>Edit/Delete</td>
</tr>
{{/each}}

我想要的是,在列表中如果parent_id为0,它应该打印'master',否则输出父类别的名称。在我的exapmle user2的父亲是id = 1显示它应该打印'user1'。 以下是我使用过的帮手:

Ember.Handlebars.helper('parent-title', function(parent_id){
  if (parent_id > 0) {
    var parent = category.findBy('id', parent_id);
    return parent.name;
  } else {
   return 'master';
  }
});

我知道如果我用App.Category.FIXTURES = [替换行var Category = [我可以完成它但我想要用FIXTURES来做。

1 个答案:

答案 0 :(得分:0)

我可以告诉你,访问这样的数据是一个坏主意。如果我是你,我会改变parent_id成为一种关系,而不是一种属性(因为它真的是什么)。然后,您可以使用category.parent.name访问模板中的父级名称。使它成为一种关系也会给你一些其他的奢侈品。

但是如果你想保持向后兼容性,请尝试使用计算属性。

App.Category = DS.Model.extend({
    name: DS.attr(),
    parent_id: DS.attr(),

    parent: function() {
        return DS.PromiseObject.create({
            promise: this.get('store').find('category', this.get('parent_id'))
        });
    }.property('parent_id'),

    parent_name: function() {
        return this.get('parent.name');
    }.property('parent.name')
});

编辑:如果你想把它变成一种关系(我认为它应该是这样),那就相当简单了。您使用DS.attr而不是DS.belongsTo。例如。

App.Categor = DS.Model.extend({
    name: DS.attr(),
    // I dropped the _id part because it's no longer an ID
    parent: DS.belongsTo('category', { inverse: null })
});

这告诉Ember-Data将您在parent字段中提供的ID解释为另一个category对象。因此category.get('parent')将返回另一个category对象,而不是数字。但在您的情况下,为了使其有效,您必须将所有0 ID转换为null ID。我不确定这是否可能,这就是我推荐计算属性的原因。

编辑:要在空父项的情况下显示master,请使用句柄if表达式。

{{#if parent}}
    {{parent.name}}
{{else}}
    master
{{/if}}