这就是我创建我的余烬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来做。
答案 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}}