2016-11-20 11 views
0

У меня есть этот кодПочему привычка мой помощник ничего возвращать полезно - Он возвращает неопределенное

/* Template Helpers Start */ 
    Template.ParticipationList.helpers({ 
     getAllParticipants: function(){ 
     var activityid = this._id; 

     Meteor.call('participation.findParticipants', activityid, function(error, result){ 
      if(error){ 
       console.log(error) 
      } 
      return result; 
     }); 

     } 
    }); 

Если я помещаю массив и возвратную ключевое слово вне вызова метеора, все в порядке - она ​​связывает имена шаблон. НО, когда это указано выше, ничто не привязывается к шаблону. Я думаю, что это как-то связано с асинксом ... Но что я делаю неправильно.

UPDATE

<ul> 
    {{#each getAllParticipants}} 
     {{name}} 
    {{/each}} 
</ul> 
+0

A [почти идентичный вопрос] (http://stackoverflow.com/questions/40703704/meteor-helpers-return-nothing) был лишь спросил несколько часов назад. – MasterAM

+0

Таким образом, решения проблемы не было. Было сказано, что это проблема, но решение не было дано. –

+0

Не совсем. Все это сводится к вашему дизайну. Нет смысла использовать вызов метода на вызов помощника. Если вам нужно запустить вычисление, чтобы получить какое-то состояние, возможно, есть лучший способ сделать это. Методы не были предназначены для сбора данных. Если вы хотите это сделать, вы можете, например, вычислить, что для этого используется реактивный словарь, привязанный к шаблону. – MasterAM

ответ

1

"результат" не будет данных. Это обычное асинхронное программирование. Что вы хотите делать с вашими данными? Вы можете поместить его в реактивную переменную для использования другими частями вашего приложения.

Meteor.call('myMethod', functoin(error, result){ 
    if(error){ 
    alert('Error'); 
    }else{ 
    Session.set("data", result) 
    } 
}); 

Я полагаю, вы хотите, чтобы отображать документы из коллекции говорят участники

Вы можете не создавать публикации, позволяя определенные поля.

например

Meteor.publish('allPartipants', function() { 
    return Listings.find(
    {type: 'actors'}, 
    {fields: { name: 1, age: 1} } 
); 
}); 

Подписка быть как:.

Meteor.subscribe('allPartipants'); 

и помощник вам просто нужно позвонить коллекцию с находкой() выборки() следующим образом.

Template.templatName.helpers({ 
    allParticipants(){ 
    Participants.find().fetch() 
    } 
}) 

и ваш HTML, как вы упомянули

<ul> 
    {{#each allParticipants}} 
     {{name}} 
    {{/each}} 
</ul> 
+0

Я хотел бы вернуть результат, чтобы я мог привязать данные к шаблону. См. Обновление выше для разметки шаблона. –

+0

, вероятно, вам следует подписаться на сбор и опубликовать только необходимые данные. и вместо того, чтобы делать meteor.call jst do. Участники .find(). fetch() , возможно, вы не сможете указать идентификатор активности, если у вас нет уже определенного объема данных. –

+0

Да, это сработает, я думаю. Спасибо –