#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 は次のとおりです。