44

次の 3 つの部分で構成されたビュー レイヤーを持つアプリケーションがあります。

  1. サイドバー
  2. ツールバー左
  3. ツールバー右

Google で役立つものを探すのに数時間費やしましたが、運がありませんでした。Router と connectOutlet を使用して名前付きアウトレットを使用してこれを行う方法については、短くて完全なアプリケーションの例が必要です。

先にThx。

4

3 に答える 3

59

新しいルーターを使用すると、次のようなことができます。

{{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 が必要です。

詳細については、こちらをご覧ください。

于 2013-02-27T15:56:08.867 に答える
11

アプリケーション テンプレートで、名前付きアウトレットを として宣言する必要があります{{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

于 2012-08-27T23:41:48.217 に答える
6

更新: 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 つのビューがありますが、それらはアウトレットにレンダリングされます。

これが他の人に役立つことを願っています。

于 2012-09-02T22:49:25.560 に答える