Handlebars helper (Corrected to pass current scope to sub template)
by dain
HTML
<script src="http://documentcloud.github.com/underscore/underscore.js"></script>
<script src="http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.0.beta.6.js"></script>
<script id="tli" type="text/x-handlebars-template">
<tr><td>{{a}}----> {{content}} <----- {{b}}</td></tr>
</script>
<script id="zaza" type="text/x-handlebars-template">
<table>
{{# applyTemplate "tli" a=1 b="y"}}<input type="text" value='a'>{{topLevelVar}}{{/ applyTemplate }}
{{# applyTemplate "tli" a=2 b="z"}}<input type="text" value='b'>{{/ applyTemplate }}
</table>
</script>
JavaScript
Handlebars.registerHelper('applyTemplate', function(subTemplateId,ctx){
var subTemplate = Handlebars.compile($('#' + subTemplateId).html());
var innerContent = ctx.fn(this);
var subTemplateArgs = _.extend({},
ctx.hash,
{content: new Handlebars.SafeString(innerContent)});
return subTemplate(subTemplateArgs)
});
var _template = Handlebars.compile($('#zaza').html());
$('body').append(_template({topLevelVar:123}));