我想检测哪个模板包含另一个模板,因为我想只为一个特定的模板设置一个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;
}
});
我该怎么做? 任何帮助将不胜感激。
答案 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)
通常,子模板确定其父上下文可能具有挑战性,因为它可能嵌套任意次数。因此,父母通常更容易向孩子提供触发所需行为的上下文。这是一个例子:
<body>
{{> parentTemplate parentContext}}
</body>
<template name="parentTemplate">
{{> childTemplate specialContext}}
{{> childTemplate}}
</template>
<template name="childTemplate">
<div class="{{isSpecialClass}}">
<p>parent name: {{name}}</p>
</div>
</template>
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
的模板将包含div
类awesome
。唯一棘手的部分是父母和孩子的帮助者必须使用Template.instance来确定他们的背景。