Ember.js渲染出口作为模态窗口

Rus*_*shi 5 ember.js

我正在尝试渲染一个模态.为此,我使用{{outlet modalOutlet}}我的应用程序模板创建了一个自定义插座,有两个插座,默认插座和modalOutlet.但是,当渲染模态模板时{{outlet modalOutlet}},我的默认值{{outlet}}变为空.

如何更改它,以便默认{{outlet}}不会更改,因此我实际上可以渲染{{outlet modalOutlet}}为模态窗口,或作为边栏作为布局的一部分

我不确定这是由于我的代码,还是renderTemplate()我遗漏的方法.我的代码jsFiddle就在这里.

// Router
App.Router.map(function(){
    this.route('contributors');
    this.route('contributor', {path: '/contributors/:contributor_id'});
});


App.ContributorsRoute = Ember.Route.extend({
    model: function() {
        return App.Contributor.all();
    },
});

App.ContributorRoute = Ember.Route.extend({
    renderTemplate: function() {
        this.render('contributor', {
            outlet: 'modalOutlet'
        });
    }
});

<script type="text/x-handlebars" data-template-name="application">  
    <nav>
        {{#linkTo "index"}}Home{{/linkTo}}
        {{#linkTo "contributors"}}Contributors{{/linkTo}}
    </nav>
    <div style='padding:5px;margin:5px;border:1px dotted red;'>
        Default Outlet
        {{outlet}}
    </div>
    <div style='padding:5px;margin:5px;border:1px dotted blue;'>    
        modalOutlet
        {{outlet modalOutlet}}
    </div>
</script>
Run Code Online (Sandbox Code Playgroud)

zep*_*lin 5

contributors您还必须渲染模板,因为当您转换到同级路由时,默认出口会被清除。

App.ContributorRoute = Ember.Route.extend({
    renderTemplate: function() {
        this.render('contributors');
        this.render('contributor', {
            outlet: 'modalOutlet'
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,如果您像这样嵌套路由,则可以避免这种情况:

App.Router.map(function(){
    this.resource('contributors', function() {
        this.route('show', {path: ':contributor_id'});
    });
});
Run Code Online (Sandbox Code Playgroud)

...并调整应用程序的其余部分以匹配新结构。modalOutlet在这种情况下,您需要使用选项指定所在位置into(在本例中:'application'