Моя конечная цель состоит в том, чтобы иметь CUSTOM_FIELD_I_FREAKEN_WANT_TO_PUBLISH
, доступных для шаблонов через {{currentUser}}
, если они вошли в систему, но Meteor не отправляет все поля из коллекции пользователей.Пользовательские поля на Meteor.users не публикуются
В сервере:
Meteor.publish('userdata', function() {
this.ready(); // do I really even need to do this?
//return Meteor.users.find(); //This STILL doesn't work
return Meteor.users.findOne({_id: this.userId});
});
В клиенте:
var s = Meteor.subscribe('userdata', function() {
console.log('userdata available');
console.log('s.ready: '+s.ready())
});
console.log('s.ready: '+s.ready())
я могу проверить, что есть поля в коллекции с помощью подключения к экземпляру Монго непосредственно и набрав: db.users.find()
:
{
"_id" : "N2M7Zp265vkbTBTFF",
"createdAt" : ISODate("2013-10-15T03:29:53.155Z"),
"CUSTOM_FIELD_I_FREAKEN_WANT_TO_PUBLISH" : "P4GRrQMixEZducmuo",
"profile" : {
"name" : "Jonathan Dumaine",
...,
},
"services" : {
"facebook" : {
....,
}
}
}
После проверки того, что подписка готова на клиенте, только f ields в коллекции пользователей: _id
и _profile
. Дополнительные поля не видны в клиенте (через консоль Meteor.users.find().fetch()
) и не определяются при доступе через шаблоны.
Это ошибка? Я делаю что-то неправильно?
О, это очень хороший момент, но в этом случае он все равно не будет работать, потому что в функции публикации нет ничего реактивного, нет? Он должен быть переключен с помощью Meteor.user() вместо this.userId. И если реактивность находится внутри функции публикации, разве нет необходимости подписываться внутри автозапуска? : | –
Я использую этот вид решения (который описан в официальных метеорных документах), и он хорошо работает для меня. Если вам необходимо обновить информацию о пользователе от клиента, вам нужно будет добавить Meteor.users.allow/deny – Rebolon
Из документов «Однако, если пользователь вступил в систему, функция публикации повторно запускается с новым значением». Таким образом, этот ответ будет работать, но некоторая информация неточна. Публикация будет повторно запускаться всякий раз, когда пользователь изменяет, чтобы клиент получал новые данные. Публикация одной строки и однострочная подписка будут работать нормально. – user728291