Паб/подписка Meteor

Это ниже мой код коллекции

Competitions = new Mongo.Collection("competitions");

var CompetitionsSchema = new SimpleSchema({
  year: {
      type: String
  },
  division: {
      type : String,
      allowedValues: ['Elite', '1st','2nd','3rd','4th','Intro']
  },
  teams:{
      type : [TeamSchema],
      allowedValues: (function () {
         return Teams.find().fetch().map(function (doc) {
            return doc.name;
        });
      }()) //here we wrap the function as expression and invoke it
  }
}); 

В функции allowValues

Teams.find пуст.

В роутере подписываюсь на публикацию следующим образом

 this.route('competitions', {
    path: '/admin/competitions',
    layoutTemplate: 'adminLayout',
    waitOn: function () {
        return [
            Meteor.subscribe('teams')
        ];
    }
});

Это моя функция публикации

Meteor.publish('teams', function() {
  return  Teams.find({},{sort: {
    points: -1,
    netRunRate : -1
  }});
});

Должен ли я делать подписку где-то еще?


person mohsinali1317    schedule 02.11.2015    source источник
comment
Как выглядит ваша функция публикации?   -  person David Weldon    schedule 02.11.2015
comment
Просто обновите мой вопрос.   -  person mohsinali1317    schedule 02.11.2015


Ответы (1)


Ваша проблема в этом фрагменте кода:

  allowedValues: (function () {
     return Teams.find().fetch().map(function (doc) {
        return doc.name;
    });
  }()) //here we wrap the function as expression and invoke it

Это вызывается при загрузке страницы. В этот момент коллекция Teams все еще будет пустой на стороне клиента. Вам нужно дождаться, пока данные будут готовы. Поскольку вы используете waitOn в железном маршрутизаторе, может быть достаточно просто переместить этот код в обратный вызов onRendered.

person Christian Fritz    schedule 02.11.2015
comment
onRendered в файле шаблона? Нравится Template.ABC.Rendered? Но я определяю это в коллекции. - person mohsinali1317; 02.11.2015