直し方:
ビューやテンプレートに問題はないようです。これらは、appendTo を介して手動でビューを作成する代わりに、Ember ルーターを使用してビューを管理する場合に機能します。したがって、代わりに:
var view = App.ParentView.create({ controller: App.ParentController.create() });
view.appendTo('#dvViewRender');
ルーターを使用します。
App.Router.map(function() {
this.route("parent", { path: "/" });
});
アプリケーション テンプレートを定義します。
<script type="text/x-handlebars">{{outlet}}</script>
証明する!
ここで作業フィドル: http://jsfiddle.net/mgrassotti/vQpe6/1/
なぜそれが機能するのですか?
ヘルパーは、render
Ember.Router 管理ビューのコンテキスト内で使用するように設計されています。emberを呼び出す{{render "child"}}
と、子テンプレートに適したコントローラー クラスを見つけようとします。
appendTo メソッドを本当に使いたい場合はどうすればよいですか?
render
わかりましたが、ヘルパーを使用できません。その他のオプション:
{{partial 'child'}}
子テンプレートを挿入しますが、ChildView または ChildController には接続しません
ビュー ヘルパーを使用すると、App.ChildView が挿入され、ParentController のコンテキストでテンプレートがレンダリングされます。
アウトレットを使用し、App.ChildController のインスタンスを使用して App.ChildView に手動で接続します
*更新(コメントに基づく)*
この動的で独立した性質のため、ページ レイアウト全体とウィジェットを 1 つのアプリケーション テンプレートに埋め込むことはできません。この種のシナリオで Ember を使用するための提案はありますか??
各ウィジェットは個別の ember アプリケーションにすることができます。それぞれには、その状態を管理するためのhistory: none
ルーターがありますが、そのルーターを設定することにより、ブラウザーの URL に接続されなくなります。例えば:
var Widget2App = Ember.Application.create({
rootElement: '#widget2',
history: 'none',
ApplicationView: Ember.View.extend({
templateName: 'widget2',
}),
ParentView: Ember.View.extend({
templateName: 'parent2',
1 ページに 2 つの ember アプリケーションを示す更新された例: http://jsfiddle.net/mgrassotti/L6aVB/