2014-12-25 2 views
0

В моем 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}} работает .....

Как преобразовать этот курсор в массив?

Большое спасибо ...

ответ

0

http://docs.meteor.com/#/full/fetch

Поэтому в основном все, что вам нужно сделать, это console.log(this.data.themes.fetch());

+0

Привет Я попытался это, но он только возвращается и печатает пустой массив ... например. [] ....... В чем причина этого? В коллекции есть записи наверняка ..... Потому что я могу заполнить сайт на основе этого с помощью Spacebars в файле .html .... – preston

+0

Как насчет console.log (WPThemes.find())? IMO вы слишком сложный код, поэтому я не могу сказать, что вы хотели сделать здесь. Если это не работает, это означает, что подписка с подписью завершена. – Sindis

+0

Привет, я проверил еще несколько тестов. Как оказалось, когда я вызываю 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

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