2014-01-17 50 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