В моем Meteor.JS приложение, которое я объявил Коллекция:Понимание и анализ Объекта Метеор JS (может быть объектом курсора)
WPThemes = new Mongo.Collection('wpthemes');
Эта коллекция светильников, которые я вставили. Он имеет по крайней мере 64 документов в нем со следующей структурой
{
productname: 'sample product name',
name: 'sameple name'
}
Я тогда выпустить издание для него:
Meteor.publish('wpthemes', function(options){
check(options, {
limit: Number
});
return WPThemes.find({}, options);
});
В RouteController я присоединяюсь к нему и назначить его на «данные» из на веб-странице:
WPThemesListController = RouteController.extend({
template: 'wordpress',
increment: 66,
wpthemesLimit: function(){
return parseInt(this.params.wpthemesLimit) || this.increment;
},
findOptions: function(){
return {limit: this.wpthemesLimit()};
},
subscriptions: function(){
this.themesSub = Meteor.subscribe('wpthemes', this.findOptions());
},
themes: function(){
return WPThemes.find({}, this.findOptions());
},
data: function(){
var hasMore = this.themes().count() === this.wpthemesLimit();
return{
themes: this.themes(),
ready: this.themesSub.ready,
nextPath: hasMore ? this.nextPath() : null
}
}
});
Так что теперь я внутри Template.wordpress.rendered = функция() {} блока. Я хочу получить доступ к тем, которые были возвращены в «данных:» выше. тем присваивается значение, возвращаемое this.themes(), и this.themes() получает возвращаемое значение return WPThemes.find ({}, this.findOptions()); и насколько я знаю, Collection.find() возвращает курсор.
Поэтому я прав, что темы удерживают объект курсора ???
Когда я печатаю на консоль this.data.themes по: console.log (this.data.themes); я получаю это:
[Log] Object (wordpress.js, line 14)
_selectorId: undefined
_transform: null
collection: Object
fields: undefined
limit: 66
matcher: Object
reactive: true
skip: undefined
sorter: null
__proto__: Object
Как перебрать этого «курсор» объект и печать на консоль всей информации, хранящейся в документах? В данном случае я хочу напечатать каждое имя и имя продукта, который был вставлен в эту коллекцию с помощью:
WPThemes.insert({
productname: stringToUse,
name: studioPressFiles[i]
});
Я вставленный АТЛАС 64 документов в этой подборке.
И все же, если я делаю console.log (this.data.themes.count());
Я получаю 0 .... Почему?
Как перебрать этот курсор, чтобы получить данные, когда его предполагаемые объекты равны 0? Веб-страница подтверждает, что в коллекции есть элементы, потому что {{#each themes}} работает .....
Как преобразовать этот курсор в массив?
Большое спасибо ...
Привет Я попытался это, но он только возвращается и печатает пустой массив ... например. [] ....... В чем причина этого? В коллекции есть записи наверняка ..... Потому что я могу заполнить сайт на основе этого с помощью Spacebars в файле .html .... – preston
Как насчет console.log (WPThemes.find())? IMO вы слишком сложный код, поэтому я не могу сказать, что вы хотели сделать здесь. Если это не работает, это означает, что подписка с подписью завершена. – Sindis
Привет, я проверил еще несколько тестов. Как оказалось, когда я вызываю console.log (this.data.themes.fetch()); например Templates.name.rendered = function() {console.log (this.data.themes.fetch());} Публикация не завершила отправку данных, и именно поэтому я получаю пустой массив. Итак, теперь вопросы: есть ли способ использовать Template.name.rendered или Template.name.xxx, чтобы получить this.data.themes только после публикации и подписки выполнил свою работу ???? – preston