流星:在子模板中使用变量

时间:2016-02-15 22:06:55

标签: javascript meteor

我正在使用模板级订阅,但在子模板中使用结果时遇到一些问题:

当我加载模板example时,将显示模板exampleChild(仅以此为基本示例 - 我知道现在没有意义)。

在创建主模板时,订阅完成,数据存储在帮助程序中:

模板

<template name="example">
  {{> Template.dynamic template=switch}}
</template>

<template name="exampleChild">
  <h1>{{result}}</h1>
</template>

辅助

Template.example.helpers({
  switch: function() { return 'exampleChild'; },
  result: function() { return Template.instance().result(); },
});

事件

Template.example.onCreated(function() {
  var instance = this;

  instance.autorun(function () {
      var subscription = instance.subscribe('posts');
  });

  instance.result = function() { 
    return Collection.findOne({ _id: Session.get('id') });
  }
});

如果我将{{result}}放在example - 模板中,一切正常。但我需要在子模板中使用该变量。

2 个答案:

答案 0 :(得分:0)

您可以将结果存储在会话变量中,然后向等待会话变量的exampleChild添加另一个帮助程序。

答案 1 :(得分:0)

你有没有尝试过:

<template name="example">
{{#with result}}
      {{> Template.dynamic template=switch}}
{{/with}}    
</template>

<template name="exampleChild">
  <h1>{{this}}</h1>
</template>

With doc

当这样做时,我更喜欢将数据上下文结果包装到一个对象中,以便在孩子身上找到合适的东西,如:

Template.example.helpers({
  switch: function() { return 'exampleChild'; },
  data: function() { return {result: Template.instance().result()} },
});

   <template name="example">
    {{#with data}}
          {{> Template.dynamic template=switch}}
    {{/with}}    
    </template>

    <template name="exampleChild">
      <h1>{{result}}</h1>
    </template>

希望有所帮助