从帮助程序获取模板数据

时间:2016-02-08 13:59:11

标签: javascript meteor meteor-blaze

我试图在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上添加的属性集... 我想辅助器是在创建的结束之前由模板调用...

知道如何解决这个问题,或者更好的方法来做我想做的事情?

由于

2 个答案:

答案 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>