2015-06-29 5 views
0

похоже я не могу отобразить массив для моего именмассив объектов пространства имен метеор

{{#each reports}} 
    {{_id}} 
{{/each}} 

мой код выглядит как этот метод сервера

.

reports : function(){ 
     var pipeline = [ 
     {$group:{_id: "$activity.destination.name","count":{$sum:1 } } }, 
     {$match:{_id:{$ne:null} }}];  

    var result = Reports.aggregate(pipeline); 
    console.log(result); 
    return result; 

от помощника

reports: function(){  
     Meteor.call("reports",function(err, data) { 
      arr =[]; 
      data.forEach(function(doc){ 
      arr.push(doc); 
      }); 
      console.log(arr); 
     return arr; 
     });    
    } 

в консоли браузера, ответ выглядит следующим образом

[Object] 
0:Object 
_id: "Balance Sheet and P&L Rates - Current Year" 
count: 2 ..etc 

им не уверен, если его пространство имен или его массив объектов не-курсоров. но это не дает мне ошибку. im не уверен, что то, что я делаю правильно.

+0

У вас проблема с объемом. В вашем помощнике ваш 'return' не находится в области помощника, а в обратном вызове. Это, вероятно, было задано раньше, позвольте мне попытаться найти вопрос. - Найденный. Проверьте https://stackoverflow.com/questions/22147813/how-to-use-meteor-methods-inside-of-a-template-helper, ваш вопрос, вероятно, является дубликатом этого. –

+0

@ Kyll благодарит за ответ. и сделайте пожалуйста. это очень ценится. –

+0

Проверьте https://stackoverflow.com/questions/22147813/how-to-use-meteor-methods-inside-of-a-template-helper. Если он решает проблему, отметьте свой вопрос как дубликат или удалите его. Рад, что смог помочь! –

ответ

1

Meteor.call немедленно возвращается, и обратный вызов вызывается, как только данные возвращаются с сервера.

Ваш шаблон ссылается на помощник, который в свою очередь вызывает метод сервера, а затем немедленно возвращает ничего не. Обратный вызов помощника, когда он возвращается, не может вернуть данные в шаблон.

В вашем случае вы должны:

  1. Создать коллекцию для отчетов.

  2. Подписка на сбор отчетов при посещении страницы в вопросе (это обычно делается из контроллера маршрута, если вы используете Iron маршрутизатор.

  3. Создать функцию публикации для публикации отчетов в коллекцию.

последний пункт не так straightforwards, как обычно, так как вы агрегирование результатов, но это все-таки возможно, что-то вроде этого (непроверенных):

Meteor.publish('reports', function(options) { 

    var sub = this; 

    var pipeline = [ 
     {$group:{_id: "$activity.destination.name","count":{$sum:1 } } }, 
     {$match:{_id:{$ne:null} }}];  

    var result = Reports.aggregate(pipeline); 
    var arrayLength = reports.length; 
    for (var i = 0; i < arrayLength; i++) { 
     var report = reports[i]; 
     sub.added('reports', report._id, report); 
    } 
}) 

Тогда вы можете просто позвонить find по сбору отчетов из вашего помощника:

reports: function() {  
    return Reports.find()  
} 

Или вернуть тот же курсор, как часть вашего контекста данных в контроллере Iron Router и использовать результат непосредственно в шаблоне ,

+0

спасибо за ответ. я попробую это. –