流星载入集合在背景中

时间:2015-01-08 02:47:11

标签: meteor

我使用iron:router subscription hook在meteor.js app的每个页面中加载所需的数据(使用订阅管理器):

subscriptions: function() {
    return subman.subscribe("ElementsCurrentLang", Session.get('currentLang'), ['home']);
}

我还想在后台预加载其他订阅(当前页面中不是所有订阅,但可能是当前页面中需要的部分订阅);我试图插入

globalSubs = {};
Meteor.subscribe("elementsCurrentLang", Session.get('currentLang'), function() {
    globalSubs.globalElements = true;
});
Meteor.subscribe("municipalitiesGlobal", Session.get('currentLang'), function() {
    globalSubs.globalMunicipalities = true;
});
Meteor.subscribe("culturalGoodsGlobal", Session.get('currentLang'), function() {
    globalSubs.globalCulturalGoods = true;
});

在另一个文件subscriptions.js中添加了一个类似以下的测试,以避免重新订阅已加载的订阅:

subscriptions: function() {
    if (!globalSubs.globalElements) return subman.subscribe("neededElementsCurrentLang", Session.get('currentLang'), ['progetto']);
},

但这不起作用,因为全局订阅是在页面订阅之前加载而不是在后台加载;

是否可以在后台加载3个全局订阅,避免应用等待加载它们(它必须只等待当前路由的订阅挂钩)?

1 个答案:

答案 0 :(得分:0)

    Router.configure({
  layoutTemplate: 'layout',
  waitOn: function(){ 
  return [Meteor.subscribe('posts'),Meteor.subscribe('colors'),Meteor.subscribe('ads')];},
  yieldTemplates:{
    'header': {to: 'header'},
    'menu': {to: 'menu'},
    'footer': {to:'footer'}
  }
});

怎么样。