从车把助手返回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