我正在尝试在#each帮助程序的上下文中使用Ember.ContainerView的currentView功能,但是当currentView属性更改为另一个视图时它会失败。
我的目的是允许编辑列表项,方法是在用户点击链接时将常规视图更改为编辑视图。
主要模板:
<ul>
{{#each itemController="person"}}
<li>{{view Ember.ContainerView currentViewBinding="cv"}}</li>
{{/each}}
</ul>
模板'名称'用于显示人物:
{{firstName}} {{lastName}} <a {{action edit}}>edit</a>
用于currentViewBinding属性('cv')的控制器以及处理编辑操作。
App.PersonController = Ember.ObjectController.extend({
cv: Ember.View.extend({
templateName: 'name'
}),
edit: function() {
this.set('cv', Ember.View.extend({
templateName: 'nameEdit'
}));
}
})
'nameEdit'模板,对应于需要显示以编辑人物对象的视图。
{{input type='text' value=firstName}} {{input type='text' value=lastName}}
当currentView属性设置为视图实例时,它将被添加到ContainerView中。如果稍后将currentView属性更改为其他视图,则新视图将替换旧视图。
但是如果我用视图实例(通过使用create()而不是extend())替换cv属性会更糟,因为重新渲染错误是yield。请参阅我的question。
一起玩的jsFiddle答案 0 :(得分:0)
我最终根本没有使用ContainerView并使用简单的if。但它没有解释为什么不能在#each帮助器中以这种方式使用ContainerView。如果有人认为这是值得一个Jira,发表评论,我会做。
<ul>
{{#each itemController="person"}}
<li>
{{#if editing}}
{{view templateName='nameEdit'}}
{{else}}
{{view templateName='name'}}
{{/if}}
</li>
{{/each}}
</ul>
毕竟简单而有效......
App.PersonController = Ember.ObjectController.extend({
editing: false,
edit: function() {
this.set('editing', true);
}
})