无法在#each中交换当前的Ember.Container View视图

时间:2013-07-07 20:07:32

标签: ember.js

我正在尝试在#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}} 

api guide说:

  

当currentView属性设置为视图实例时,它将被添加到ContainerView中。如果稍后将currentView属性更改为其他视图,则新视图将替换旧视图。

但是如果我用视图实例(通过使用create()而不是extend())替换cv属性会更糟,因为重新渲染错误是yield。请参阅我的question

以下是与http://jsfiddle.net/fblanvil/tD3Ph/3/

一起玩的jsFiddle

1 个答案:

答案 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);
    }
})