Meteor在服务器启动时填充集合

时间:2016-02-24 06:14:23

标签: meteor

在服务器启动时,此代码需要insert MenuItems集合中的某些文档。但是浏览器控制台显示它是空的[] 我不知道这个_.each是什么意思,只是把它从另一篇文章中删除了。

为什么以及如何解决它?感谢

///////////////////////////
//     both/both.js      //
///////////////////////////
MenuItems = new Mongo.Collection('menuItems');

///////////////////////////
//    server/server.js   //
///////////////////////////
Meteor.publish('menuItems', function(){
  return MenuItems.find();
});
Meteor.startup(function () {
  var items =
    [
      {menuItem: "task1", login: false},
      {menuItem: "task2", login: true},
      {menuItem: "task3", login: true},
      {menuItem: "task4", login: true},
      {menuItem: "task5", login: true},
      {menuItem: "task6", login: true},
      {menuItem: "task7", login: false},
      {menuItem: "task8", login: false},
      {menuItem: "task9", login: false},
      {menuItem: "login", login: false},
      {menuItem: "logout", login: false}
    ]
  _.each(items, function (doc) {
    MenuItems.insert(doc);
  })
});

///////////////////////////
//   client/client.js    //
///////////////////////////
Template.mainMenu.helpers({
  menuItems: function () {
    return MenuItems.find();
  }
});

1 个答案:

答案 0 :(得分:0)

如果您删除了autopublish包,则在您的client / client.js文件中,您需要订阅menuItems发布。

///////////////////////////
//   client/client.js    //
///////////////////////////
Template.mainMenu.onCreated(function () {
    var template = this;
    template.handler = template.subscribe('menuItems');
});

Template.mainMenu.helpers({
  menuItems: function () {
    return MenuItems.find();
  }
});

Template.mainMenu.onDestroyed(function () {
    var template = this;
    if (template.handler && template.handler.stop) template.handler.stop();
});

P.S:_.each遍历数组,并在元素中调用函数,每个项目都包含作为参数传递给函数的项目。