如何在编译后将事件侦听器添加到Handlebars模板中
How do I add event listeners to Handlebars templates after compilation?
我有一个简单的模板设置,如下所示:
<script id="entry" type="text/x-handlebars-template">
<p>Some content</p>
<h2>Language Select:</h2>
<button type="button" class="btn btn-primary">English</button>
<h2>Ready:</h2>
<button type="button" id="play" class="btn btn-success">Play</button>
<button type="button" id="stop" class="btn btn-danger">Stop</button>
</script>
然而,在我的文档中,我也有一个包含以下内容的脚本:
var playButton = document.querySelector('#play');
playButton.addEventListener('click', function (e) {
sendMessage('Cue', 'Play');
}, false);
大多数情况下(但并非总是如此),由于javascript的异步特性,它会返回:
Uncaught TypeError: Cannot read property 'addEventListener' of null
如果我将该代码封装在一定数量的setTimeout
中,它将始终有效。
有人能向我解释一下将脚本中的事件侦听器添加到生成的模板内容中的最佳方法吗?
我看了这个答案,但他们建议的方式似乎只是在添加事件侦听器之前添加一个延迟。
对不起,忘记我以前的回答了。
您需要先为渲染模板,然后将此html插入正文。。。
var source = document.querySelector("#some-template").innerHTML;
var template = Handlebars.compile(source);
document.body.innerHTML = template();
然后添加侦听器。。。
http://jsfiddle.net/jwrae0n2/
相关文章:
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 在函数中添加数组元素的数值
- 如何将歌曲添加到jPlayer
- 在html Select中添加搜索
- Java脚本时间添加
- FabricJs-限制主对象内添加对象的移动区域
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在 Handlebars.js 中呈现部分时向上下文添加属性
- 如何在编译后将事件侦听器添加到Handlebars模板中
- 向Handlebars中的输入元素添加属性(与Ember.JS 1.0一起使用)