0

我正在尝试在 #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指南说:

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

但是,如果我用视图实例替换 cv 属性(通过使用 create() 而不是 extend())会更糟,因为重新渲染错误是 yield。看到我的这个问题

这是与http://jsfiddle.net/fblanvil/tD3Ph/3/一起玩的 jsFiddle

4

1 回答 1

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);
    }
})
于 2013-07-09T15:03:08.617 回答