未调用Meteor.publish回调

时间:2015-06-14 02:22:07

标签: javascript meteor

我有一个非常简单的项目,只有一个Meteor.publish调用:

Boxes = new Meteor.Collection("boxes");

if (Meteor.isServer) {
  Meteor.startup(function () {
    Boxes.remove({}) //clearing the database
    Boxes.insert({ //adding one element to the database
      boxes: [1],
      currentId: 1
    });
  });
  console.log("publish1")
  Meteor.publish("boxes", function() {
    console.log("publish2") //this does not run! ever!
    return Boxes.find();
  });
}

由于某些原因,我的Meteor.subscribe似乎不起作用(集合总是返回空),所以我在我的代码中放了几个console.log。由于某种原因,我的服务器代码打印" publish1"但它不打印" publish2",而如果我在示例项目中尝试相同,它会打印两者。

注意:我删除了自动发布包。

2 个答案:

答案 0 :(得分:2)

您需要在客户端订阅它。这项工作对我来说:

Boxes = new Meteor.Collection("boxes");

if (Meteor.isServer) {
 Meteor.startup(function () {
  Boxes.remove({}) //clearing the database
  Boxes.insert({ //adding one element to the database
    boxes: [1],
    currentId: 1
  });
});
console.log("publish1")
Meteor.publish("boxes", function() {
    console.log("publish2") //this does not run! ever!
    return Boxes.find();
  });
}

if(Meteor.isClient){

  Meteor.subscribe('boxes');

}

publish2仅在您在浏览器中打开应用时打印。

答案 1 :(得分:0)

在路径(your_project/server/)中创建一个单独的JavaScript文件publish.js,并将发布功能放在该文件中。

Meteor.publish("boxes", function() {
  console.log("publish2") //this does not run! ever!
  return Boxes.find();
});

然后在客户端的相应JS文件中将此发布订阅为

Meteor.subscribe('boxes');