2014-01-17 53 views
3

我正在使用Navigator模板处理WinJS应用程序,并且遇到一个奇怪的问题。WinJS保留元素ID浏览时

在应用中存在一些过滤搜索页面,在搜索点击产生的应用程序导航到另一个页面编辑的项目时。

的问题是,这两个页面具有相同ID的标签,并通过JavaScript在第二页访问元素时,它返回从搜索页面的元素。

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

我明白,我可以唯一命名为每个页面的元素,但我可以看到我们的团队遇到了此问题一次又一次为越来越多的人在使用该应用程序和功能的增长。

+1

如果您正在做单页导航,这可能是预期的行为。我的猜测是,这是因为搜索页面被隐藏,而不是从DOM中删除。您可以做很多事情:更改任一元素的ID,使用类而不是ID来获取元素,当结果加载时从搜索页中删除元素。 – jakerella

回答

1

你说的是使用导航模板吗?如果是这样,我假设你没有对navigator.js做任何修改。通过“搜索页面”,这是一个单独的PageControl或搜索合同吗?

在navigator.js的PageControlNavigator._navigating方法包含了两个重要的调用,摆脱旧的PageControl的:

  • oldElement.winControl.unload
  • oldElement.winControl.dispose(是Windows 8.1/2.0 WinJS)
  • oldElement.parentNode.removeChild(oldElement)
  • oldElement.innerText = ""
- 当然,只有在使用WinJS.Navigator.navigate加载n时,才会调用PageControlNavigator新闻页面。

诊断此问题的最佳方法是,当你调试应用程序,并着眼于DOM资源管理器切换到桌面。

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

+3

感谢您回来,它看起来像导航模板不包括代码来导航离开页面时卸载DOM。 –

+0

嘿@J_D,你有没有找到卸载DOM的方法? – SLearner