余烬CLI-在每个循环中使用组件而不是itemController的条件输出
Ember CLI- conditional output within an each loop using a component instead of itemController
在我的Ember CLI应用程序中,我使用{{#each}} helper来输出表的行。'name' 'created_date'和'type'都在相关模型中定义。
{{#each model as |job|}}
<tr>
<td>{{job.name}}</td>
<td>{{job.created_date}}</td>
<td>{{job.type}}</td>
<td>
{{#if typeZero}}
<p>Content that will display if the value of 'type' is 0.</p>
{{/if}}
</td>
</tr>
{{/each}}
在每行的第四个表单元格中,如果记录的'type'值为0,我希望显示某些内容。
我首先尝试添加一个itemController到每个助手:
{{#each job in model itemController="jobrowcontroller"}}
......
{{/each}}
这给了我一个错误:"Uncaught error: Assertion Failed: #each循环遍历的值必须是Array。你传递了***@controller:array:,但它应该是一个ArrayController"
我发现itemController现在已经被弃用了,应该使用组件。
创建了一个名为job-table-row的组件,并更新了页面模板:
{{#each model as |job|}}
{{#job-table-row model=job as |jobTableRow|}}
<tr>
<td>{{job.name}}</td>
<td>{{job.created_date}}</td>
<td>{{job.type}}</td>
<td>
{{#if typeZero}}
<p>Content that will display if the value of 'type' is 0.</p>
{{/if}}
</td>
</tr>
{{/job-table-row}}
{{/each}}
在组件handlebars文件中,我简单地使用{{yield}},一切都显示良好。
在组件js文件中,我有:
import Ember from 'ember';
export default Ember.Component.extend({
tagName: '',
typeZero: function() {
var currentStatus = this.get('model.status');
if (currentStatus === 0) {
this.set('typeZero', true);
} else this.set('typeZero', false);
}.on('didInsertElement'),
});
问题是函数'typeZero'不会运行。是否有可能通过组件实现这一点,或者我是否需要使用完全不同的方法?
不能让步,因为typeZero只存在于组件内部。相反,将模板移动到组件:
// templates/components/job-table-row.hbs
<td>{{model.name}}</td>
<td>{{model.created_date}}</td>
<td>{{model.type}}</td>
<td>
{{#if statusZero}}
<p>Content that will display if the value of 'status' is 0.</p>
{{/if}}
</td>
和简化你的模板外面:
<table>
<tbody>
{{#each model as |job|}}
{{job-table-row model=job}}
{{/each}}
</tbody>
</table>
同样,你可以用计算属性代替你的复杂方法:
// components/job-table-row.js
import Ember from 'ember';
export default Ember.Component.extend({
tagName: 'tr',
statusZero: Ember.computed.equal('model.status', 0)
});
在http://ember-twiddle.com/de8a41b497ef4f116bab查看所有工作
相关文章:
- 如何从ArrayController访问ItemController
- 什么是ArrayController.itemController的ObjectController类似物
- ember.js将itemController与每个帮助程序一起使用无法按预期工作
- 当ArrayController重新排序时,Ember itemController将被重新实例化
- 余烬CLI-在每个循环中使用组件而不是itemController的条件输出
- Emberjs -同时使用CollectionView和ItemController
- Understanding Ember.JS itemController