检测哪个模板包含Meteor中的当前模板

时间:2014-11-06 18:52:33

标签: javascript meteor

我想检测哪个模板包含另一个模板,因为我想只为一个特定的模板设置一个css类。

以下是它应该如何运作:

<template name="includedTempl">    
      <div class="panel panel-default {{#if templateX}}specialCSS{{/if}}" id="{{_id}}">
</template>

Template.includedTempl.helpers({
    templateX: function() {
       if (this.includedBy('templX.html')) {
            return true;
       }
       return false;
    }
});

我该怎么做? 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您需要访问模板实例才能获取父名称。

<template name="parent">
   {{> child }}
</template>

<template name="child">
   <p>
      My father is <b>{{ fatherTemplate abc=23 }}</b>
   </p>
</template>
Template.child.helpers({
  'fatherTemplate' : function(){
      return UI._templateInstance().view.parentView.name;
  }
});

Template.child.rendered = function(){
    console.log("Father Template name: ", this.view.parentView.name);
}

答案 1 :(得分:1)

通常,子模板确定其父上下文可能具有挑战性,因为它可能嵌套任意次数。因此,父母通常更容易向孩子提供触发所需行为的上下文。这是一个例子:

app.html

<body>
  {{> parentTemplate parentContext}}
</body>

<template name="parentTemplate">
  {{> childTemplate specialContext}}
  {{> childTemplate}}
</template>

<template name="childTemplate">
  <div class="{{isSpecialClass}}">
    <p>parent name: {{name}}</p>
  </div>
</template>

app.js

if (Meteor.isClient) {
  Template.body.helpers({
    // add some context to the parent do demo how it can be modified
    parentContext: {name: 'dave'}
  });

  Template.parentTemplate.helpers({
    specialContext: function () {
      // make a copy of the parent data context
      var data = _.clone(Template.instance().data || {});
      // modify the context to indicate the child is special
      data.isSpecial = true;
      return data;
    }
  });

  Template.childTemplate.helpers({
    isSpecialClass: function () {
      // grab the context for this child (note it can be undefined)
      var data = Template.instance().data;
      if (data && data.isSpecial)
        // add the 'awesome' class if this child is special
        return 'awesome';
    }
  });
}

此处,父模板创建两个子模板。第一个子项与isSpecial一起被赋予父上下文。包含isSpecial的模板将包含divawesome。唯一棘手的部分是父母和孩子的帮助者必须使用Template.instance来确定他们的背景。

推荐阅读