次の 3 つの部分で構成されたビュー レイヤーを持つアプリケーションがあります。
- サイドバー
- ツールバー左
- ツールバー右
Google で役立つものを探すのに数時間費やしましたが、運がありませんでした。Router と connectOutlet を使用して名前付きアウトレットを使用してこれを行う方法については、短くて完全なアプリケーションの例が必要です。
先にThx。
新しいルーターを使用すると、次のようなことができます。
{{outlet "menu"}}
{{outlet}}
ルートでは、アウトレットのコンテンツを処理できます。
// application route
Ember.Route.extend({
renderTemplate: function() {
// Render default outlet
this.render();
// render extra outlets
this.render("menu", {
outlet: "menu",
into: "application" // important when using at root level
});
}
});
menu
ただし、-template が必要です。
詳細については、こちらをご覧ください。
アプリケーション テンプレートで、名前付きアウトレットを として宣言する必要があります{{outlet sidebar}}
。あなたが言及したツールバーについても同様です。
編集:残りは古くなっています。@dineth が言ったように、Rendering a Templateを参照してください。
それからあなたのルートで(あなたApp.NavigationView
がそこに固執したいものだとしましょう):
App.Router = Em.Router.extend({
root: Em.Route.extend({
index: Em.Route.extend({
route: '/',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('sidebar', 'navigation');
}
})
})
});
サイドバーの例: http://jsfiddle.net/q3snW/7/
ヘルパーについてはこのドキュメントを参照し、コールバックについてはこのドキュメントを参照してください。{{outlet}}
.connectOutlet
更新: Ember API の変更により、このコードは古くなっています。
自分に最適な解決策を見つけたと言えるところまで来ました。
<script type="text/x-handlebars" data-template-name="application">
<div class="container">
<div class="toolbar">{{outlet toolbar}}</div>
<div class="main">{{outlet dashboard}}</div>
<div class="sidebar">{{outlet sidebar}}</div>
</div>
</script>
このようなアプリケーション テンプレートを使用して、ビューをレンダリングする場所を選択できます。このような:
App.router = Ember.Router.create({
enableLogging: true,
location: 'history',
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/admin/',
redirectsTo: 'login'
}),
login: Ember.Route.extend({
route: '/admin/login/',
doLogin: function(router, context) {
"use strict";
router.transitionTo('dashboard', context);
},
connectOutlets: function (router, context) {
"use strict";
router.get('applicationController').connectOutlet('login', "login");
}
}),
dashboard: Ember.Route.extend({
route: '/admin/dashboard/',
doLogout: function(router, context) {
"use strict";
router.transitionTo('login', context);
},
connectOutlets: function (router, context) {
"use strict";
router.get('applicationController').connectOutlet('sidebar', 'sidebar');
router.get('applicationController').connectOutlet('toolbar', 'toolbar');
router.get('applicationController').connectOutlet('dashboard', 'dashboard');
}
})
})
});
ソリューションの観点からは重要ではない 3 つのビューがありますが、それらはアウトレットにレンダリングされます。
これが他の人に役立つことを願っています。