2013-03-19 3 views
0

Я использую Backbone.js для проецирования профилей, поэтому я могу просматривать данные, принадлежащие/пользователю, и эта часть работает нормально. Я могу сгенерировать _id на основе имени пользователя и передать его в функцию публикации сервера, которая регистрирует ее. Тем не менее, когда я вхожу результаты обратно клиенту в функции подписки, мой результат выглядит следующим образом:Meteor Опубликовать возврат пустого курсора

Object {STOP: функция, готова: функция}

//Client Side 
Template.userquery.userproject = function() { 
    var query = Session.get('userquery'); 
    var user = Meteor.users.findOne({username: query}); 
    if (user) { 
     console.log(user._id); //(works) 
     campaigns = Meteor.subscribe('userquery', user._id, function() { 
      console.log('ready'); //(works) 
     }); 
     console.log(campaigns); //(returns Object {stop: function, ready: function}) 
     return campaigns; 
    } 
} 
//Server Side 
Meteor.publish('userquery', function(userid) { 
    console.log('break'); 
    console.log(userid); //(I get userid in Terminal) 
    var campaigns = Campaigns.find({owner: userid}, {fields: {owner: 1, name: 1}}); 
    if (campaigns) { 
     console.log(campaigns); 
     return campaigns; 
    } 
}); 

я упускаю что-то в этой функции ? У меня отключена автоматическая публикация, потому что она генерирует мой поиск дважды.

ответ

1

Meteor.subscribe, according to the docs, "Возвращает ручку, которая обеспечивает методы stop() и ready()". Таким образом, поведение, которое вы видите, предназначено.

+0

ОК, похоже, мне нужно вернуться через готовый метод? –

+0

Опубликовать не возвращает курсор, он дает вам дескриптор, который вы можете использовать для остановки или перезапуска подписки. Чтобы использовать данные, просто вызовите свой «Campaigns.find», как обычно, до тех пор, пока его после завершения подписки, где вы говорите «готово» (по времени не кодовое) – Akshat

Смежные вопросы