Meteor:make layout.html WaitOn订阅?

时间:2014-07-17 09:28:06

标签: meteor handlebars.js iron-router

我正在尝试制作一个粘贴在页面底部的聊天(Template.chatlist)功能(类似于Facebook上的聊天功能,其中聊天框是持久的,而后台中的页面因用户而变化浏览网站的其他部分)。所以我把聊天框放在布局页面上的把手模板中(所以它不是从{{> yield}}模板渲染的)。问题是,它没有在加载之前等待订阅(没有到layout.html的路由,所以我无法在路由器上设置waitOn),所以它无法从我的用户集合中提取信息。

我需要知道,在订阅正确完成后,如何让layout.html页面等待加载?当然,我可以将聊天模板放在每个页面的yield模板中,让它等待正常,但有没有办法让我不必这样做?

<main class="main container" id="central">
  {{> yield}}
  {{> chatlist}}
</main>

这就是layout.html现在的样子。聊天列表模板不等待任何数据订阅,因为它不在yield部分(因此不受路由器控制)

我也做了Template.chatlist.helpers并将用户数据注册到帮助器中,但出于某种原因,当我通过控制台记录Users.count测试它时,控制台返回零。

1 个答案:

答案 0 :(得分:2)

使用区域:

<template name="layout">
  <aside>
    {{> yield region='aside'}}
  </aside>

  <div>
    {{> yield}}
  </div>

  <footer>
    {{> yield region='footer'}}
  </footer>
</template>

Router.map(function () {
  this.route('home', {
    path: '/',
    template: 'myHomeTemplate',
    layoutTemplate: 'layout',
    yieldTemplates: {
      'myAsideTemplate': {to: 'aside'},
      'myFooter': {to: 'footer'}
    },
    waitOn: function() {
      // ...
    }
  });
});

请参阅Iron Router docs