【问题标题】:Why wont my helper return anything usefull - It returns undefined为什么我的助手不返回任何有用的东西 - 它返回未定义
【发布时间】:2016-11-20 19:45:48
【问题描述】:

我有这个代码

/* 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;
        });

        }
    });

如果我将数组和 return 关键字放在流星调用之外,一切都很好 - 它将名称绑定到模板。但是什么时候是上面的,没有任何东西绑定到模板上。 我认为它与异步有关......但我做错了什么。

更新

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

【问题讨论】:

  • 几个小时前有人问过nearly identical question
  • 所以没有解决问题的办法。据说这是一个范围界定问题,但没有给出解决方案。
  • 并非如此。这一切都归结为您的设计。每次调用助手调用一个方法并没有多大用处。如果您需要运行计算来获得某种状态,可能有更好的方法来做这件事。方法不是为获取数据而设计的。如果你想这样做,你可以让计算填充一个绑定到模板的反应字典,例如。

标签: asynchronous meteor callback helpers


【解决方案1】:

“结果”不会出现在数据中。 这是常规的异步编程。 你想用你的数据做什么? 您可以将它放在一个反应​​变量中,供您应用的其他部分使用。

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

我想你想显示集合中的文档,比如 participants

您可以创建一个允许某些字段的发布。

例如

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

订阅如下:

 Meteor.subscribe('allPartipants');

在 helper 中,您只需使用 find().fetch() 调用集合,如下所示。

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

和你提到的 html

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

【讨论】:

  • 我想返回结果,以便我可以将数据绑定到模板。有关模板标记,请参阅上面的更新。
  • 您可能应该订阅该集合并仅发布所需的数据。而不是让 meteor.call jst 做 Participants.find().fetch() 你可能无法活动 id 除非你们每个人都已经有一些数据范围。
猜你喜欢
  • 2016-03-07
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多