我正在使用Navigator模板处理WinJS应用程序,遇到了一个奇怪的问题。
在应用程序中有一个带有一些过滤器的搜索页面,当点击搜索结果时,应用程序导航到另一个页面来编辑项目。
问题是这两个页面都有一个具有相同id的标签,当在第二页中通过JavaScript访问该元素时,它会从搜索页面返回该元素。
我可以看到,由于JS / CSS在单页面应用程序中的加载方式,这可能是预期的行为,但是我应该做些什么来卸载元素/ JS?
我很欣赏我可以为每个页面唯一命名元素,但我可以看到我们的团队一次又一次地遇到这个问题,因为越来越多的人在处理应用程序并且功能越来越多。
答案 0 :(得分:1)
您正在使用导航模板吗?如果是这样,我假设您没有对navigator.js进行任何更改。通过“搜索页面”,这是一个单独的PageControl还是搜索合同?
navigator.js中的PageControlNavigator._navigating
方法包含几个重要的调用,它们摆脱旧的PageControl:
oldElement.winControl.unload
oldElement.winControl.dispose
(Windows 8.1 / WinJS 2.0)oldElement.parentNode.removeChild(oldElement)
oldElement.innerText = ""
诊断此问题的最佳方法是在调试应用程序并查看DOM资源管理器时切换到桌面。
一种解决方法可能是向搜索页面的PageControl.unload成员添加一些代码,从而删除DOM中的所有元素。您可以在host元素上使用WinJS.Utilities.empty
将其全部删除。当用户导航回“搜索”页面时,应用程序中存储的HTML将被加载回PageControl主机。