2016-12-26 37 views
0

我有一個頁面xml定義的應用程序,其網格佈局沒有子項。在頁面「加載」事件期間,我創建了一堆子元素,並將它們動態添加到網格佈局中。Page'loaded'事件行爲的解釋 - navigateTo()和goBack()之間的區別

我導航到另一個頁面,然後調用frameModule.topmost()。goBack()返回上一頁。

在那個主頁上,'loaded'事件被再次調用 - 但是我有在之前的導航中添加的孩子 - 所以看起來像沒有再次創建頁面。有趣的是,如果來自同一個主頁面,我導航到另一個頁面,然後導航回(即沒有調用goBack()),那麼'loaded'事件被調用,但頁面沒有孩子我補充說 - 這看起來像是新創建的頁面。

我的問題是:

  1. 當一個調用GoBack的(),爲什麼是「裝」叫上頁 - 儘管它看起來像以前加載頁面正在使用。

  2. 這是一個錯誤?

  3. 任何方式來確定在'加載'功能 - 這是否真的是一個新鮮的頁面加載或所有元素已創建。

回答

0

GoBack的與導航之間的主要區別是,GoBack的只是回到了導航歷史堆棧,並起到相同的,如果這個人打了「後退」按鈕(Android)或揮筆向右(iOS版)。導航前進,並添加一個新的堆棧條目,您可以goBack

讓我們看兩個例子:

所以,如果我開始第一頁上,並導航到第二頁,然後導航到第3頁,則用戶打我的「<後退」按鈕,然後在我的代碼,然後導航到第一頁,我導航堆棧應該是這樣的: Page1 Page2 Page3 Page1

如果我再使用硬件後退按鈕(觸發)goBack這將是第3頁,第二頁,然後,然後第1頁。用戶可能不希望在Page1上點擊後退按鈕將它們放在Page3上而不是退出。所以除非你想要一個奇怪的導航;這通常會被認爲是意外/破壞的行爲。

在適當的導航我可能做到這一點: Page1 Page2 (Not stored in History: used "backstackVisible: false") Page3 然後從第3頁一Back實際上把我在第一頁,並從第1 Back會退出應用程序。這將是預期的行爲。


現在,作爲該事件。 此頁面的事件是NavigatingTo,Loaded,NavigatedTo - 它們按此順序觸發。

被調用的加載事件不是一個bug;它是通過設計;當頁面組件被加載時 - 它允許你能夠設置頁面元素。所有組件都有一個「加載」事件。所以這是一個組件級別的事件而不是頁面導航類型的事件。舉例來說,我之前做過: <Switch android:loaded="fixAndroidSwitch"/>然後我的fixAndroidSwitch例程在交換機上固定了一些東西。

的NavigatingTo和NavigatedTo是實際的導航事件,並且他們也有作爲參數的一部分傳遞一個值: function onNavigatingTo(context) { if (context.isBackNavigation) { /* Do whatever */ } }

有關頁面事件的更多信息;你可以閱讀我的博客文章http://fluentreports.com/blog/?p=191,並解釋更多

+0

是isBack參數記錄在任何地方。我正在使用goBack()導航回頁面,但它仍然未定義。 – dashman

+0

對不起,isBack在內部使用 - 我有時會忘記我正在處理的是哪一部分。 LOL - 通過onNavigatedTo傳遞的參數,onNavigatingTo具有「isBackNavigation」值。 (對或錯) – Nathanael

相關問題