EmberJS 模型迭代值
EmberJS Model Iteration by Value
作为我的第一个 ember 项目,我正在一家餐厅的网站上工作,我很难弄清楚如何处理菜单模型。
当前 models/menu.js 文件如下所示:
从 'ember-data' 导入 DS;
export default DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
price: DS.attr('number'),
soyFree: DS.attr('string'),
glutenFree: DS.attr('string'),
addOnName: DS.attr('string'),
addOnPrice: DS.attr('number'),
type: DS.attr('string'),
isAppetizer: Ember.computed('type', function(){
return this.get('type') == 'Appetizer';
}),
isBreakfast: Ember.computed('type', function(){
return this.get('type') == 'Breakfast';
})
});
我的菜单模板文件是:
<div class="col-md-8 col-md-offset-2 text-center">
<h2>Menu</h2>
<h2 class="text-center">Appetizers</h2>
{{#each model as |menu|}}
{{#if menu.isAppetizer}}
<p>
<span><strong>{{menu.name}}</strong> - <em>{{menu.description}}</em> - {{menu.price}}</span>
{{#if session.isAuthenticated}}<button class="btn btn-danger" {{action "deleteMenuItem" menu}}>Delete</button>{{/if}}
</p>
{{/if}}
{{/each}}
<h2 class="text-center">Breakfast</h2>
{{#each model as |menu|}}
{{#if menu.isBreakfast}}
<p>
<span><strong>{{menu.name}}</strong> - <em>{{menu.description}}</em> - {{menu.price}}</span>
{{#if session.isAuthenticated}}<button class="btn btn-danger" {{action "deleteMenuItem" menu}}>Delete</button>{{/if}}
</p>
{{/if}}
{{/each}}
</div>
{{outlet}}
如您所见,我必须重复每个部分(开胃菜/早餐)的所有菜单模型条目。 ember 有没有办法让我只能迭代每个 #each 块的特定项目类型。
即,
{{#each model.type == 'Appetizer'}}
Fill the appetizer section
{{/each}}
这是我的路由文件:
import Ember from 'ember';
export default Ember.Route.extend({
model(){
return this.store.findAll('menu');
}
});
- 您可以 return 模型挂钩中的所需值,并使用
model.appetizerMenu
访问开胃菜菜单。
model() {
return this.store.findAll('menu').then((result) => {
return {
appetizerMenu: result.filterBy('isAppetizer', true),
breakFastMenu: result.filterBy('isBreakfast', true),
}
});
}
2.you 可以在控制器中计算 属性。
appetizerMenu: Ember.computed.filterBy('model','isAppetizer',true),
breakFastMenu: Ember.computed.filterBy('model','isBreakfast',true),
3.Further 你可以简化你不需要在模型中为每种类型计算 属性 就像你现在拥有的那样。
您可以在需要时单独使用 type
属性进行过滤。
appetizerMenu: Ember.computed.filterBy('model','type','Appetizer'),
breakFastMenu: Ember.computed.filterBy('model','type','Breakfast'),
4.If 你想要更多像你建议的购物助手 {{#each model.type == 'Appetizer'}}
那么你可能会对 ember-composable-helpers
感兴趣
作为我的第一个 ember 项目,我正在一家餐厅的网站上工作,我很难弄清楚如何处理菜单模型。
当前 models/menu.js 文件如下所示:
从 'ember-data' 导入 DS;
export default DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
price: DS.attr('number'),
soyFree: DS.attr('string'),
glutenFree: DS.attr('string'),
addOnName: DS.attr('string'),
addOnPrice: DS.attr('number'),
type: DS.attr('string'),
isAppetizer: Ember.computed('type', function(){
return this.get('type') == 'Appetizer';
}),
isBreakfast: Ember.computed('type', function(){
return this.get('type') == 'Breakfast';
})
});
我的菜单模板文件是:
<div class="col-md-8 col-md-offset-2 text-center">
<h2>Menu</h2>
<h2 class="text-center">Appetizers</h2>
{{#each model as |menu|}}
{{#if menu.isAppetizer}}
<p>
<span><strong>{{menu.name}}</strong> - <em>{{menu.description}}</em> - {{menu.price}}</span>
{{#if session.isAuthenticated}}<button class="btn btn-danger" {{action "deleteMenuItem" menu}}>Delete</button>{{/if}}
</p>
{{/if}}
{{/each}}
<h2 class="text-center">Breakfast</h2>
{{#each model as |menu|}}
{{#if menu.isBreakfast}}
<p>
<span><strong>{{menu.name}}</strong> - <em>{{menu.description}}</em> - {{menu.price}}</span>
{{#if session.isAuthenticated}}<button class="btn btn-danger" {{action "deleteMenuItem" menu}}>Delete</button>{{/if}}
</p>
{{/if}}
{{/each}}
</div>
{{outlet}}
如您所见,我必须重复每个部分(开胃菜/早餐)的所有菜单模型条目。 ember 有没有办法让我只能迭代每个 #each 块的特定项目类型。 即,
{{#each model.type == 'Appetizer'}}
Fill the appetizer section
{{/each}}
这是我的路由文件:
import Ember from 'ember';
export default Ember.Route.extend({
model(){
return this.store.findAll('menu');
}
});
- 您可以 return 模型挂钩中的所需值,并使用
model.appetizerMenu
访问开胃菜菜单。
model() { return this.store.findAll('menu').then((result) => { return { appetizerMenu: result.filterBy('isAppetizer', true), breakFastMenu: result.filterBy('isBreakfast', true), } }); }
2.you 可以在控制器中计算 属性。
appetizerMenu: Ember.computed.filterBy('model','isAppetizer',true),
breakFastMenu: Ember.computed.filterBy('model','isBreakfast',true),
3.Further 你可以简化你不需要在模型中为每种类型计算 属性 就像你现在拥有的那样。
您可以在需要时单独使用 type
属性进行过滤。
appetizerMenu: Ember.computed.filterBy('model','type','Appetizer'), breakFastMenu: Ember.computed.filterBy('model','type','Breakfast'),
4.If 你想要更多像你建议的购物助手 {{#each model.type == 'Appetizer'}}
那么你可能会对 ember-composable-helpers