如果数据发生变化,请更新流星模板

时间:2017-05-16 23:19:41

标签: templates meteor meteor-blaze

我有城市热门地名名单的火焰模板:

<template name="city">
  {{#each places}}
    {{this}}
  {{/each}}
</template>

和帮助我试图从GoogleMaps获取地方数据的模板:

Template.city.helpers({
    places: function() {
        if (GoogleMaps.loaded()) {
            var places = [];
            ...

            service.radarSearch(request, function(points) {
                points.slice(0, 8).forEach(function(point) {
                    service.getDetails({
                        placeId : point.place_id
                    }, function(details) {
                        places.push({
                            name: details.name
                        });
                    });
                });
                return places; 
            });
        }
    }
})

但它不起作用,因为在带有数据的辅助数组之前呈现的模板已准备就绪。我应该怎么做才能让帮助者返回数据被动并在模板中显示这些数据?

1 个答案:

答案 0 :(得分:3)

使用onRendered钩子将结果分配给模板实例上的反应变量:

import { ReactiveVar } from 'meteor/reactive-var';
Template.city.onRendered(function() {
  const self = this;
  self.places = new ReactiveVar();
  service.radarSearch(request, function(points) {
    self.places.set(places);
  }
});

从那里开始,只需从助手返回反应变量即可:

Template.city.helpers({
  places: function() {
    const tpl = Template.instance();
    const places = tpl && tpl.places.get();
    return places || [];
  }
});