我正在使用把手编写应用程序,但没有使用Meteor或Ember。
我正在编写一个帮助程序,需要在呈现html后运行一些代码,以便将onclick
附加到某些dom元素。有没有办法在助手中做到这一点,而不依赖于丑陋的setTimeout
或类似的东西?
我找到了基于Meteor的应用程序的解决方案,但不是仅使用了车把。
模板:
{{#autocomplete config}}{{/autocomplete}}
帮助者:
Handlebars.registerHelper('autocomplete', function(config) {
return autocompleteTemplate();
});
答案 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);');
}