导航时WinJS保留元素ID

时间:2014-01-17 10:58:37

标签: javascript windows-8 winjs windows-8.1

我正在使用Navigator模板处理WinJS应用程序,遇到了一个奇怪的问题。

在应用程序中有一个带有一些过滤器的搜索页面,当点击搜索结果时,应用程序导航到另一个页面来编辑项目。

问题是这两个页面都有一个具有相同id的标签,当在第二页中通过JavaScript访问该元素时,它会从搜索页面返回该元素。

我可以看到,由于JS / CSS在单页面应用程序中的加载方式,这可能是预期的行为,但是我应该做些什么来卸载元素/ JS?

我很欣赏我可以为每个页面唯一命名元素,但我可以看到我们的团队一次又一次地遇到这个问题,因为越来越多的人在处理应用程序并且功能越来越多。

1 个答案:

答案 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 = ""
- 当然,只有在使用WinJS.Navigator.navigate加载新页面时才会调用PageControlNavigator。

诊断此问题的最佳方法是在调试应用程序并查看DOM资源管理器时切换到桌面。

一种解决方法可能是向搜索页面的PageControl.unload成员添加一些代码,从而删除DOM中的所有元素。您可以在host元素上使用WinJS.Utilities.empty将其全部删除。当用户导航回“搜索”页面时,应用程序中存储的HTML将被加载回PageControl主机。