我正在将jQueryMobile用于移动应用程序。显然我希望UI能够非常快速地加载,但是应用程序有多个工具,所以我只想在导航到'页面'时加载相关的外部JS库。对于主应用程序(90%的页面),我只想要jQueryMobile核心文件(即来自Google AJAX库和jQueryMobile JS& CSS的最新jquery核心)。但是,对于剩余的10%,我需要启用地理定位的Google Maps v3(因此Google Gears外部库)和MarkerClusterer库(我只有必要时才会绘制400个标记)。
据我了解jQueryMobile是如何工作的(所有这些都是通过内部AJAX请求),必须在应用程序初始化时为整个应用程序加载所有库。当用户首次请求移动站点(所有核心文件以及所有地图/ gelocation / marker群集文件)时,这使我的应用程序真的很重。我希望避免这种情况发生,因为它会吓跑许多潜在用户(特别是当我的用户中只有一部分需要地理定位时)。
我尝试在相关页面的末尾(在页脚div之前)加载Google地图组件,并尝试将它们放入< head>标签在相关页面中。但是这两个都无法初始化(使用附加到函数的console.log()输出进行检查)。
是的,在您提出之前,我正在使用“pagecreate”live()函数并正在寻找正确的div(如果我将与Google地图相关的所有内容放入根页头标记中,一切正常就可以了)
我觉得这一定是一个非常常见的问题:使用jQueryMobile选择性加载页面组件。我在网上找不到任何东西 - 大多数jQueryMobile教程都是常见的花园'Hello World!'多种多样,所以如果你有什么可以提供我的全部耳朵!有选择性加载教程的链接也欢迎!
提前致谢!
答案 0 :(得分:3)
所有这些页面都会在每个页面上初始化所有必需的库。
是的,这是默认的方式,所以无论用户首先调用哪个页面/子页面 - 一切正常。所有库工作正常,只加载一次。但你可能知道。
假设您想稍后加载某些库,以便即使用户不需要它们也不会减慢整个应用程序的速度,您应该强制它们仅使用正确的页面加载。
这可以通过某些不同的方式实现:
rel="external"
放在该子页面的所有链接中。它显然会重新加载页面并让你失去JQM缓存页面的一些优点,但是及时加载库可能是值得的page
div时,它应该加载并运行JS。它无法为您工作的原因可能是lib依赖于domready
事件,您可能必须为库触发它。但是如果你只是触发事件,它将使一切(包括JQM)处理它。你必须让它只触发库。要做到这一点,你需要:
pagesomething
处理程序另外:如果您遇到网页问题,请尝试绑定pageshow
而不是pagecreate
,看看是否需要首先看到元素。
答案 1 :(得分:1)
好问题!我还没有在jQuery Mobile文档中看到过这个。关注naugtur我会在你的页面div中说出类似的内容
<script>
if(typeof MyFunction == "undefined") {
$.getScript('myfunction.js', function() {
// initialize if necessary
});
}
</script>
如果您正在加载Google所服务的内容,特别是如果有多个文件,则jsload是一个不错的选择。
答案 2 :(得分:0)
问题,您是否尝试使用head.js方法解决问题?他们将js文件设置为加载为未阻止的请求,如图像在浏览器中加载的方式,而不是默认浏览器方式一次加载一个js文件并阻止其他js加载