繁体   English   中英

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

[英]How to access FIXTURES data from the Ember.Handlebars.helper?

这是我创建余烬夹具的方式:

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”,否则显示父类别的名称。 在我的实例中,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 = [我可以完成,但我想使用FIXTURE来完成。

我可以告诉你,访问这样的数据是一个坏主意。 如果我是你,我会将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在一个null父的情况下,使用把手if表达。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM