Handlebars helper:在呈现模板后如何运行代码?

时间:2016-07-27 11:36:25

标签: handlebars.js

我正在使用把手编写应用程序,但没有使用Meteor或Ember。

我正在编写一个帮助程序,需要在呈现html后运行一些代码,以便将onclick附加到某些dom元素。有没有办法在助手中做到这一点,而不依赖于丑陋的setTimeout或类似的东西?

我找到了基于Meteor的应用程序的解决方案,但不是仅使用了车把。

模板:

{{#autocomplete config}}{{/autocomplete}}

帮助者:

Handlebars.registerHelper('autocomplete', function(config) {
  return autocompleteTemplate();
});

1 个答案:

答案 0 :(得分:1)

我找不到任何内置的东西,所以我最终将Handlebars.compile包装在一个辅助函数中,可以对渲染模板进行后处理。

function compileWithExtras(template, options) {
    var template = Handlebars.compile(template, options);
    return function() {
        var rendered = template.apply(null, arguments);
        //do your post processing here
        return rendered;
    };
}

var exampleTemplate = compileWithExtras(document.getElementById("foo").innerHTML);
var postProcessedHtml = exampleTemplate(data);

如果您正在预编译模板,那么您将需要定位Handlebars.precompile这将会有点棘手,尽管可能只需要一个简单的replace('return buffer;','return postProcess(buffer);'),例如,

    function postProcess(buffer) {
    //do your post processing here
    return buffer;        
}   

function precompileWithExtras(template, options) {
    return Handlebars.precompile(template, options)
        .replace('return buffer;','return postProcess(buffer);');
}