流星集合无法从服务器到客户端

时间:2014-12-19 23:40:19

标签: meteor meteorite

我一直在阅读流星文档,但目前我正面临以下问题。

代码块1

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

我只需使用Meteor.quizzes.find()

即可从模板中看到上述集合

代码区块2

服务器端代码

// Declare server Movies collection
Movies = new Meteor.Collection("movies");


// Seed the movie database with a few movies
Meteor.startup(function () {
    if (Movies.find().count() == 0) {
        Movies.insert({ title: "Star Wars", director: "Lucas" });
        Movies.insert({ title: "Memento", director: "Nolan" });
        Movies.insert({ title: "King Kong", director: "Jackson" });
    }


console.log(Meteor.movies.find().count()) //retunr 3 records
Meteor.publish('movies', function(){
        return Movies.find({});
    })

路由代码如下

 Router.map(function() {
      //Admin routes
      this.route('userManagement', {
        path: '/user-management',
        waitOn: function() {
          return Meteor.subscribe('users');
        }
      });
    });


when I use the users in the above block of code, It working fine. 
but when i use movies/quizzes on same route map .



  Router.map(function() {
      //Admin routes
      this.route('moviesManagement', {
        path: '/movies-management',
        waitOn: function() {
          return Meteor.subscribe('movies');
        }
      });
    });

但是当我尝试访问Meteor.movi​​es.find()时,没有任何事情发生,我认为订阅方法也没有返回任何内容。

我花了很多时间修理,但我找不到soltioon。请帮帮我。

1 个答案:

答案 0 :(得分:0)

您需要订阅movies出版物,方法是使用Iron Router的waitOnsubscriptions选项,或者自行调用订阅。请注意,在测验代码中,您在运行路线之前正在等待测验订阅。

手动调用订阅:

// on client
Meteor.subscribe('movies', function() {
  console.log(Movies.find().count()); // 3
});

使用Iron Router处理您的订阅:

// on client
Router.route('/movies', {
  waitOn: function() { return Meteor.subscribe('movies'); }
});

顺便说一句,您使用的是旧的传统Iron Router API。我建议查看official Iron Router guide