【问题标题】:How to render template into an outlet from another template如何将模板渲染到另一个模板的插座中
【发布时间】:2014-01-15 12:37:00
【问题描述】:

我的应用程序将有一个侧边栏,其内容会根据当前路线而变化。因此,如果有人访问account,侧边栏上的内容将不同于有人访问members

我尝试使用 accounts 路由来执行此操作,但遇到了问题。我正在使用此代码

Dashboard.AccountRoute = Ember.Route.extend({
        renderTemplate: function() {
                this.render('account_choices', {
                        outlet: 'choices',
                        into: 'sidebar'
                })
        }
});

我的application 模板是:

{{render header}}

{{render sidebar}}

<div id="outlet" class="main">
        {{outlet}}
</div>

而我的sidebar 模板是:

<div class="sidebar">
        {{outlet choices}}
</div>

但它不会将account_choices 渲染到sidebar 模板中的出口choices。它还会产生错误Assertion failed: Error while loading route: TypeError: Cannot call method 'connectOutlet' of undefined

如何将account_choices 模板渲染到sidebar 中的choices 插座?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    这有点难以解释,但是整个路径是预先连接的,并且命名的出口sidebar 在渲染之前不存在。幸运的是,您可以稍后在运行循环中连接渲染,届时 dynamic named outlet 将存在。

    renderTemplate: function() {
      var self = this;
      Em.run.later(function(){
        self.render('account_choices', {
          outlet: 'choices',
          into: 'sidebar'
        });
      });
     }
    

    http://emberjs.jsbin.com/azimigEF/1/edit

    【讨论】:

    • sidebaraccountrenderTemplate 钩子中?
    • 我刚试过,它有效,但只有当我走那条路线时。当我在该路线上并刷新时,这意味着我直接访问/accounts,它会失败并显示该错误消息。
    • 哇,谢谢!我想你已经回答了我遇到的几乎所有 Ember 问题,所以也谢谢你。 :-)
    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多