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 プロパティが後で別のビューに変更された場合、古いビューが新しいビューに置き換えられます。

しかし、(extend() の代わりに create() を使用して) cv プロパティをビュー インスタンスに置き換えると、再レンダリング エラーが発生するため、さらに悪化します。私のこの質問を見てください。

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 に答える