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}));