I want to pass a new parameter to a template with keeping it's original data context.
{{> myTemplate withIcon=True}}
Acually my solution is to wrap data like this.
<code>
{{> myTemplate originalData=this withIcon=True}}
</code>
Is there a better solution ?
You can always extend the current context in a helper:
Template.parentTemplate.helpers({
iconContext: function() {
var result = _.clone(this);
result.withIcon = true;
return result;
}
});
And use it like this:
<template name="parentTemplate">
{{> myTemplate iconContext}}
</template>
Alternatively, you could create a more generic helper like this:
Template.registerHelper('extendContext', function(key, value) {
var result = _.clone(this);
result[key] = value;
return result;
});
And then choose the key/value pairs from within the html of any template:
<template name="parentTemplate">
{{> myTemplate extendContext 'withIcon' true}}
{{> myTemplate extendContext 'isAwesome' false}}
</template>
Either solution is more desirable than hiding the original data in a separate field, as it keeps the child template generic.
Building on David's second option to allow for multiple attributes:
<template name="parentTemplate">
{{> myTemplate extendContext withIcon=true label="Has Icon" }}
{{> myTemplate extendContext withIcon=false label="No Icon" }}
</template>
and then in javascript:
Template.registerHelper('extendContext', function(data) {
var result = _.clone(this);
_.each(data.hash, function(value, key) {
result[key] = value;
})
return result;
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With