我有城市热门地名名单的火焰模板:
<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;
});
}
}
})
但它不起作用,因为在带有数据的辅助数组之前呈现的模板已准备就绪。我应该怎么做才能让帮助者返回数据被动并在模板中显示这些数据?
答案 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 || [];
}
});