我使用的引导程序主题需要一些javascript文件。在我的一些页面上,我从服务器加载了相当多的内容,这意味着在评估javascript文件时,并不是所有的html都会在页面上。
这样可以防止事件处理程序绑定到在评估javascript之后加载的html。到目前为止,我已经通过在ajax调用完成后加载脚本来解决这个问题,但这对我来说似乎很做作
$.get("/path/to/rest/call", function(data) {
$('#htmlElement').html(data);
}).done(function() {
$.getScript("/path/to/js/file.js");
});
我觉得有更好的方法可以做到这一点。有吗?
解决这个问题的方法可能比动态加载metrui库更简单。看起来它依赖于jQuery的.ready()
来知道页面何时加载以及何时可以初始化它的内容。但是,这并不适用于您,因为您是通过Ajax动态加载内容的。
您可以做的是将jQuery ready()通知推迟到ajax内容加载之后。这将推迟启动metro的初始化,直到加载动态内容之后。这将允许您像他们的文档建议的那样,在<head>
部分的库存<script>
标签中加载metro。它的工作方式是在加载jQuery后将其添加到<head>
部分:
<script>
jQuery.holdReady(true);
</script>
然后,在您的ajax代码成功完成后,您可以执行以下操作(在将新内容放入页面后,从成功处理程序):
jQuery.holdReady(false);
然后它释放jQuery来调用它的.ready()
处理程序,metro将在您的内容加载后执行它的操作。
jQuery.holdReady(...)
参见jQuery文档。