我使用的引导主题需要一些javascript文件。在我的一些页面上,我从服务器加载了相当多的内容,这意味着在评估javascript文件时页面上并不是所有的html。
这可以防止事件处理程序绑定到评估javascript后加载的html。到目前为止,我已经通过在ajax调用完成后加载脚本来修复问题,但这对我来说似乎很不错。这是我的职责:
$.get("/path/to/rest/call", function(data) {
$('#htmlElement').html(data);
}).done(function() {
$.getScript("/path/to/js/file.js");
});
我觉得有更好的方法可以做到这一点。有吗?
答案 0 :(得分:1)
除了动态加载metroui库之外,还有一种更简洁的解决方法。看起来它依赖于jQuery的.ready()
来了解页面何时被加载以及何时可以初始化它的东西。但是,这对您没有用,因为您通过Ajax动态加载内容。
你可以做的是你可以暂停jQuery ready()通知,直到加载你的ajax内容。然后,这将阻止启动Metro的初始化,直到加载动态内容为止。这样,您就可以像他们的文档建议一样在<script>
部分的库存<head>
标记中加载metro。这种方法的工作方式是在加载jQuery后将其添加到<head>
部分:
<script>
jQuery.holdReady(true);
</script>
然后,在您的ajax代码成功完成之后,执行此操作(在您将新内容放入页面后,从成功处理程序中执行此操作):
jQuery.holdReady(false);
然后释放jQuery来调用它的.ready()
处理程序,并且在你的内容加载后,metro会做它的事情。
jQuery.holdReady(...)
见jQuery doc。