Meteor中的辅助块无法访问数据

时间:2014-04-06 22:24:08

标签: meteor

我已自动发布。

Template.play.helpers ({
   title: function () {
  wcount = Workouts.find().count();
  console.log(wcount);
   }
});

这给了我0。

但如果我在浏览器的开发者控制台中。

Workouts.find().count()
24

我最近升级到0.8

如果我将waitOn添加到路由器,那么每次加载页面时都会出现此行为。

Router.map(function() {
this.route('splash', {path: '/'});
this.route('play', { 
path: '/play',
template: 'play',
waitOn: function() { 
    return Meteor.subscribe('Workouts')
}
});

在@Christian Fritz的一些帮助之后,似乎我的问题是它没有等待我的订阅,如果帮助程序因为未定义而没有返回任何内容,那么当数据加载时它不会重新运行。 / p>

我现在已经关闭了自动发布。我的server / publications.js是:

Meteor.publish('workouts', function() {
   return Workouts.find();
});

我的路由器是:

Router.configure({
     layoutTemplate: 'layout',
     loadingTemplate: 'loading'
});

 Router.map(function() {
    this.route('splash', {path: '/'});
    this.route('play', { 
   path: '/play',
   template: 'play',
   waitOn: function() { 
     return Meteor.subscribe('workouts')
  }
    });
});

in play.js

var workoutsSubcription = Meteor.subscribe('workouts');
console.log("workoutsSubscription.ready() is ",workoutsSubcription.ready());

返回:     workoutsSubscription.ready()为false

一次或两次,然后当它满载为真时最终重新运行。但是,waitOn是否意味着它不会在数据存在之前运行该页面?

1 个答案:

答案 0 :(得分:0)

你可能想要这样的东西:

var workoutsSubcription = Meteor.subscribe('workout_count');

Template.play.helpers ({
   title: function () {
     if(workoutsSubcription.ready()){
       wcount = Workouts.find().count();
     }
   }
});

您还需要在服务器上发布订阅

Meteor.publish("workout_count", function () {
  return Workouts.find();
});