[英]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.