从车把助手返回html对象

我需要从handlebars helper发送一个html对象,如下所示:

Handlebars.registerHelper('helper', function () { //Create an input object var inp=$(''); //How to return 'inp' object without using Handlebars.SafeString return inp; }); 

我知道我可以使用’Handlebars.SafeString()’返回html字符串,但这对我没用,我需要传递html对象并为其分配一些事件。

可能吗?

正如dandavis评论的那样,使用Handlebars你不能模板对象,只能是字符串。 但是,在使用MutationObserver将元素添加到DOM后,您可以获得元素。 我已经创建了一些这样做的帮助器,请参阅后期渲染栏中的jq助手。 另请参阅针对不同方法的类似问题的答案 。

这是一个后渲染条的演示 ,请查看标题“在模板中定义一个jQuery元素”下的示例。

帮助程序使用MutationObserver ,这里是浏览器支持信息,如果需要,请参阅webcomponents-lite以获取polyfill 。

相关代码的简要说明:

watch.js定义了一个函数forHtml(html, callback) ,它在DOM中遇到给定的html时触发回调。 它修改了html,暂时拥有一个使其独一无二的类。

jQueryHelpers.js定义了助手jq 。 帮助程序使用watch.forHtml函数来监视帮助程序定义的块,并使用jquery元素作为参数调用传入模板的函数。

这是我链接的示例的缩短版本,模板:

 

button with a handler: {{#jq setHandler}}{{/jq}}

并且js:

 var context = { setHandler: function(element) { element.on('click', function() { alert('clicked'); }); } }; var html = template(context); // append html somewhere and the setHandler will be invoked