jquery mobile中页面的DOM缓存对在不同页面上使用相同id的影响?

时间:2014-06-12 07:23:40

标签: jquery jquery-mobile

我是Jquery mobile的新手,旨在使用jquery mobile创建一个庞大的应用程序。 我在jquery移动文档中找到了这个

所有元素的id属性不仅必须在给定页面上是唯一的,而且在站点的页面中也必须是唯一的。这是因为jQuery Mobile的单页导航模型允许许多不同的页面"同时出现在DOM中。这也适用于使用多页模板,因为所有"页面"在模板上立即加载。

此外,此链接Jquery Mobile Javascript not working on ajax load建议:使用类而不是id来防止此问题。

由于我目前的应用程序非常依赖于ID,因此我觉得我必须对其进行大量更改才能使其高效运行。 但后来我在jquery移动文档中读到了这个

因此,jQuery Mobile有一个简单的机制来保持DOM的整洁。每当它通过Ajax加载页面时,jQuery Mobile会标记要在以后导航时从DOM中删除的页面(技术上,在页面隐藏事件中)。如果您重新访问已删除的页面,则浏览器可能能够从其缓存中检索页面的HTML文件。如果没有,它将从服务器重新获取文件。 (对于嵌套列表视图,一旦导航到不属于列表的页面,jQuery Mobile将删除构成嵌套列表的所有页面。)

这是否意味着,如果所有页面都被ajax加载,我不必担心在不同的页面上使用相同的ID,因为不同的页面不会出现在DOM在同一时间?

另外,通过ajax加载所有页面的缺点是什么?

这对我来说有点混乱。请帮忙。

1 个答案:

答案 0 :(得分:1)

所以你要创建一个巨大的jQuery Mobile应用程序?这是你的第一个错误,当你使用jQuery Mobile时,你需要建立一个更轻的应用程序。 jQuery Mobile在大型应用程序中表现出色,特别是在移动设备上。最新版本带来了一些性能改进,但仍然没有达到合理的水平。

让我们继续,在使用jQuery Mobile时你应该使用唯一的id。这不仅仅是页面ID的问题,因为所有内容都被加载到DOM中,如果您拥有相同ID的元素,那么您很有可能无法访问正确的内容。我在这里这么多问题,以至于它甚至都不再有趣了。人们通常不会考虑这些小事情,但如果你不从项目开始考虑它们,你将最终陷入痛苦的世界。并且相信我最好先做一些事情然后在开发过程中对代码进行屠杀。

官方文档中没有说的是jQuery Mobile如何处理不同的页面模板。您这样/粘贴了jQuery Mobile处理多HTML页面处理的方式,这或多或少是正确的。你不知道的是,当处理多个HTML文件时,只有一个数据角色="页面"允许每个HTML文件只有div(加上内部内容),其他一切都被丢弃。还有一件事,当使用多页面模板(一个HTML文件中的几个页面)时,您无法以编程方式从DOM中删除它们,作为第一个/初始HTML文件的一部分加载的所有内容都将保留在DOM中直到一切都焕然一新。所以忘记从DOM中删除这些页面,你可以手动完成,但那时你将面临另一组问题。

接下来,如果你有多个页面共享一个id加上相同的内容,你会遇到很多关于事件绑定的问题,我不能强调你这有多重要。

关于倒数第二个问题,您可以使用具有相同ID的页面,但它们需要在不同的HTML文件中分开,您不应该缓存它们。只有在这种情况下,旧页面才会从DOM中删除,新页面永远不会与共享相同ID的旧页面发生冲突。我还是想建议你反对这个解决方案。更好的解决方案是动态创建/删除这些页面。这样您就可以更好地控制代码。

关于你的最后一个问题,更多的是,只有缺点是应用程序的速度。但如果放弃AJAX加载,你将面临更多问题,当然这是完全不同的故事。

如果您想了解最佳jQuery Mobile设计方法,请阅读 this this 文章。