我试图在onCreated挂钩上更新我的模板的datacontext:
Template.segment.onCreated(function () {
var tp = this;
this.test = "TEST";
Meteor.call('getTreeCategData', function (error, data) {
tp.ExternalapiData = data;
tp.chart = new Chart();
//...
});
});
我希望将这些引用保留在父模板上,以便从子模板访问它们。
现在我"更新"在onCreated上设置值的datacontext。
Template.segment.helpers({
parentDatacontext: function(){
this.chart = Template.instance().chart; //undefined
this.apiData = Template.instance().apiData; //undefined
//But it executed later, when I open the chrome object inspector the reference, they are not undefined anymore
console.log("parentDatacontext: ", Template.instance());
return this;
}
});
我的模板:
<template name="segment">
{{#with parentDatacontext}}
{{> childtp}}
{{/with}}
</template>
最后在子模板事件的处理程序中使用它们:
Template.childtp.events({
'click .js-close': function(e, tp){
console.log(" tp parent data: ",Template.parentData(1));
}
});
我实际上很快就陷入了这个过程,我甚至无法从帮助者打印onCreated上添加的属性集... 我想辅助器是在创建的结束之前由模板调用...
知道如何解决这个问题,或者更好的方法来做我想做的事情?
由于
答案 0 :(得分:1)
parentDataContext()
正在您的Meteor.call
回来之前执行,然后因为您的变量没有被动,助手不再被执行。您希望使用reactive variable来存储这些值,以便在方法设置值时执行帮助程序。
要访问子模板中的新反应变量,请按照this forum post。
进行操作答案 1 :(得分:1)
ReactiveVar
怎么样?
Template.segment.onCreated(function () {
var tp = this;
this.apiData = new ReactiveVar();
Meteor.call('getTreeCategData', function (error, data) {
tp.apiData.set(data);
tp.chart = new Chart();
//...
});
});
Template.segment.helpers({
parentDatacontext: function(){
this.chart = Template.instance().chart;
this.apiData = Template.instance().apiData.get();
// data - {{with parentDatacontext}}
// no data - {{else}}
if (this.apiData) {
return this;
}
}
});
和模板代码
<template name="segment">
{{#with parentDatacontext}}
{{> childtp}}
{{else}}
Loading or something...
{{/with}}
</template>