将参数传递给模板而不覆盖数据上下文
Pass parameters to template without overriding data context
我想将新参数传递给模板,同时保留其原始数据上下文。
- 原始数据上下文:{消息:"hello"}
{{> myTemplate withIcon=True}}
- 数据上下文被 {withIcon:True} 覆盖
实际上我的解决方案是像这样包装数据。
<code>
{{> myTemplate originalData=this withIcon=True}}
</code>
有更好的解决方案吗?
您始终可以在助手中扩展当前上下文:
Template.parentTemplate.helpers({
iconContext: function() {
var result = _.clone(this);
result.withIcon = true;
return result;
}
});
并像这样使用它:
<template name="parentTemplate">
{{> myTemplate iconContext}}
</template>
或者,您可以像这样创建一个更通用的助手:
Template.registerHelper('extendContext', function(key, value) {
var result = _.clone(this);
result[key] = value;
return result;
});
然后从任何模板的 html 中选择 key/value 对:
<template name="parentTemplate">
{{> myTemplate extendContext 'withIcon' true}}
{{> myTemplate extendContext 'isAwesome' false}}
</template>
这两种解决方案都比将原始数据隐藏在单独的字段中更可取,因为它使子模板保持通用。
在 的基础上允许多个属性:
<template name="parentTemplate">
{{> myTemplate extendContext withIcon=true label="Has Icon" }}
{{> myTemplate extendContext withIcon=false label="No Icon" }}
</template>
然后在 javascript:
Template.registerHelper('extendContext', function(data) {
var result = _.clone(this);
_.each(data.hash, function(value, key) {
result[key] = value;
})
return result;
})
我想将新参数传递给模板,同时保留其原始数据上下文。
- 原始数据上下文:{消息:"hello"}
{{> myTemplate withIcon=True}}
- 数据上下文被 {withIcon:True} 覆盖
实际上我的解决方案是像这样包装数据。
<code>
{{> myTemplate originalData=this withIcon=True}}
</code>
有更好的解决方案吗?
您始终可以在助手中扩展当前上下文:
Template.parentTemplate.helpers({
iconContext: function() {
var result = _.clone(this);
result.withIcon = true;
return result;
}
});
并像这样使用它:
<template name="parentTemplate">
{{> myTemplate iconContext}}
</template>
或者,您可以像这样创建一个更通用的助手:
Template.registerHelper('extendContext', function(key, value) {
var result = _.clone(this);
result[key] = value;
return result;
});
然后从任何模板的 html 中选择 key/value 对:
<template name="parentTemplate">
{{> myTemplate extendContext 'withIcon' true}}
{{> myTemplate extendContext 'isAwesome' false}}
</template>
这两种解决方案都比将原始数据隐藏在单独的字段中更可取,因为它使子模板保持通用。
在
<template name="parentTemplate">
{{> myTemplate extendContext withIcon=true label="Has Icon" }}
{{> myTemplate extendContext withIcon=false label="No Icon" }}
</template>
然后在 javascript:
Template.registerHelper('extendContext', function(data) {
var result = _.clone(this);
_.each(data.hash, function(value, key) {
result[key] = value;
})
return result;
})