當然,這取決於您的用戶界面的構建方式以及視圖的連接方式。我能想到的最簡單的方法是以某種方式檢測頁面中後退按鈕的存在並觸發點擊。
在我的應用程序每一個需要處理backbutton
事件視圖與cls = 'back'
一個按鈕,實現tap
監聽器負責返回到上一個視圖的邏輯。
關於如何實現這個邏輯:這裏沒有魔杖。如果一個特定的視圖可以通過一個父視圖來訪問,那麼你可以對它進行硬編碼。否則,如果一個視圖可以從多個視圖中獲取,我在視圖的控制器的屬性中保存對我來自的視圖的引用,然後在後退的tap
上移動到該視圖。
移動到視圖的動畫通常可以通過Ext.Viewport.animateActiveItem(parentView, {type: 'fade'});
獲得(但同樣這取決於你如何實現你的看法樹)
所以在我的處理程序backbutton
我檢查了這樣一個按鈕,[cls=back]
(但你也可以檢查ui
或任何你想要的),並且我發動了它的tap
事件。 此外,當我檢測到我在根視圖上時,我詢問用戶是否要退出該應用程序,如果是這樣,我打電話給exit()
。
_handleBackButtonEvent : function(e) {
// First look if the current view is the mainView
var item = Ext.Viewport.getActiveItem();
// If we are on mainView, quit.
// Sayonara, goodbye, adios
if (item.getId() === 'mainView') {
navigator.notification.confirm(
"Really quit?",
function(option) {
if (option == 1) {
navigator.app.exitApp();
}
},
"Confirm",
"Yes,No"
);
} else {
// else look if the current view has a backbutton
var titlebar = item.down('titlebar[docked=top]');
var backbutton = null;
if (titlebar) {
backbutton = titlebar.down('button[iconCls=back]');
}
if (backbutton && !backbutton.isHidden() && !backbutton.isDisabled()) {
backbutton.fireEvent('tap');
} else {
// if not, fallback to mainView
item = Ext.getCmp('mainView');
Ext.Viewport.animateActiveItem(item, {type: 'slide', direction: 'right'});
}
}
e.preventDefault();
}
'後退按鈕的存在'意味着我將不得不使用導航視圖嗎? – Diffy
沒有。我將進一步解釋我的觀點,使之更加清晰。 –
這個按鈕是否帶有由sencha控制的iconCls =後退,這樣當我們點擊它時,它會帶我們前一個視圖,而不寫任何邏輯。我可以讓它看不見,因爲我沒有這樣的按鈕在我的應用程序? – Diffy