Javascript 在尚未呈现的元素上缓存DOM和绑定单击事件
稳定的应用程序开发需要严格的代码组织 进入清晰的“块” 为此,我使用mustach将脚本中的数据呈现到HTML中 我将我的胡子模板存储在特殊的脚本标记中:Javascript 在尚未呈现的元素上缓存DOM和绑定单击事件,javascript,jquery,html,caching,template-engine,Javascript,Jquery,Html,Caching,Template Engine,稳定的应用程序开发需要严格的代码组织 进入清晰的“块” 为此,我使用mustach将脚本中的数据呈现到HTML中 我将我的胡子模板存储在特殊的脚本标记中: <script id="template" type="text/template"> Mustache template goes here and is invisible </script> 现在想象一下,我想将单击事件绑定到Mustach模板中的一个元素,或者缓存稍后将使用的元素。。。我显然不能在页面
<script id="template" type="text/template">
Mustache template goes here and is invisible
</script>
现在想象一下,我想将单击事件绑定到Mustach模板中的一个元素,或者缓存稍后将使用的元素。。。我显然不能在页面加载时这样做,因为模板还没有呈现
要使事件正常工作,我必须仅在呈现HTML后声明事件。要使用元素,我必须在需要时手动选择它,例如$'.foo'而不是缓存的this.foo
其结果是,现在我的点击事件和jQuery选择散布在我的对象中,而不是bindEvents和cacheDOM函数中
下面是一个简化的问题示例:
在上面的例子中,这并不坏。。。但随着我的应用程序变得越来越复杂,这变得有点麻烦
现在想象一下,我想将一个点击事件绑定到一个小胡子中的元素
模板
我显然不能在页面加载时这样做,因为模板还没有呈现
使用jQuery可以满足此需求。元素的.innerHTML可以通过附加事件和事件处理程序传递给jQuery
jQuery.holdReady(true);
var template = jQuery($("#template").html());
// template.filter("element").on("event", function() {// do stuff})
jQuery("body").append(template);
jQuery.holdReady(false);
jQuery(function() {
// do stuff
})
链接是不完整的,你可以包括html,javascript吗?你想达到什么目标?生活和食物的目的是什么?可能是@guest的复制品请看这里的小提琴:@JethroHazelhurst是的,不确定是什么问题?
jQuery.holdReady(true);
var template = jQuery($("#template").html());
// template.filter("element").on("event", function() {// do stuff})
jQuery("body").append(template);
jQuery.holdReady(false);
jQuery(function() {
// do stuff
})