Ember.js多个,名为出口用法

Edu*_*ván 43 outlet ember.js

我有一个应用程序,它将视图层分为三个部分:

  1. 侧边栏
  2. 工具栏左
  3. 工具栏右

我花了几个小时试图找到一些有用的谷歌,但我没有运气.我需要一个简短而完整的应用程序示例,说明如何使用Router和connectOutlet以及命名出口.

先生.

Wil*_*Wit 58

使用新的路由器,您可以执行以下操作:

{{outlet "menu"}}
{{outlet}}
Run Code Online (Sandbox Code Playgroud)

在您的路线中,您可以处理插座的内容:

// 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
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

你应该有一个menu-template.

你可以在这里阅读更多相关信息.


dec*_*hov 11

在您的应用程序模板中,您需要将命名的出口声明为{{outlet sidebar}}.同样对于你提到的工具栏.

编辑:其余的已经过时了.正如@dineth所说,请参阅渲染模板.

然后在你的路线(让我们说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');
            }
        })
    })
});
Run Code Online (Sandbox Code Playgroud)

边栏示例:http://jsfiddle.net/q3snW/7/

在助手上引用此文档{{outlet}},并在回调上提供此文档.connectOutlet.

  • 我相信这个解决方案现在已经过时了Ember.JS.请参阅文档:http://emberjs.com/guides/routing/rendering-a-template/ (5认同)

Edu*_*ván 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>
Run Code Online (Sandbox Code Playgroud)

使用这样的应用程序模板,我可以选择呈现视图的位置.像这样:

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');
            }
        })
    })
});
Run Code Online (Sandbox Code Playgroud)

我有三个观点,从解决方案的角度来看,这些观点并不重要,那些观点会被渲染到他们的网点.

希望这有助于其他人.

  • 我应该提一下,这段代码不再适用于最新版本的Ember. (9认同)