我正在Meteorjs的一个项目上工作,但我在渲染一些数据时遇到了问题。
问题是:在第一个模板渲染时,没有html。然后我将模板切换到' MAP'查看并返回我的列表'查看,现在有不同培训师的HTML。
我有routeController
执行一些额外操作,以便从data
获取一些Algolia
,并将其推送到data.trainers
数组。
例如(在trainers_controller.js
中):
data: function() {
var trainers_tab = [];
// algolia
var client = algoliasearch('XXXXXXXXX', 'XXXXXXXXXX');
var index = client.initIndex('myindex');
if(Meteor.user()) {
tab = Trainers.find({});
tab.forEach(function(trainer) {
index.getObject(trainer.doctor_id, function (err, content) {
if (err) {
console.error(err);
return;
}
// geoloc address
// TODO : retrieve training exact address
// push to array
trainers_tab.push({
objectID: content.objectID,
name: content.name,
city: content.city,
speciality: content.speciality,
photo: content.photo,
about: content.about,
email: content.email,
phone: content.phone
//address:
});
});
});
}
var data = {
params: this.params || {},
trainers: trainers_tab
};
return data;
}
我在data.trainers
中确切地拥有了我需要的东西。
接下来,我尝试使用
的基本方法将训练者渲染到我的template
中
{{#each trainer in trainers}}
Do some stuff in html yeah !
{{/each}}
我确定并可以使用Blaze的{{>TemplateDynamic }}
空格键切换视图。
答案 0 :(得分:0)
根据您的功能定义位置,您可以使用ReactiveVar
并将其设置为data
功能中的数据,即,而不是返回{{1} },将对象设置为ReactiveVar:
data
最后,使用帮助程序检索数据:
Template.foo.onCreated(function() {
this.myData = new ReactiveVar(null);
});
Template.foo.onRendered(function() {
// Run your data function here
const data = {
params: this.params || {},
trainers: trainers_tab
};
this.myData.set(data);
});
这样,如果您的模板在之前呈现,则会检索数据,一旦在您的函数中设置了myData,它就会被更新并重新呈现。