Skip to content

Commit

Permalink
hifive#169 アクティブページでのみh5jqmpageshow/hideが実行されるよう修正。
Browse files Browse the repository at this point in the history
__ready処理中にA->B->Aのように遷移しても、h5jqmpageshowが2回実行されないよう修正。
テストケースにフォーマッタを適用。
  • Loading branch information
mtakeuchi committed Feb 20, 2013
1 parent c8fad29 commit b19a7c5
Show file tree
Hide file tree
Showing 2 changed files with 419 additions and 246 deletions.
40 changes: 24 additions & 16 deletions hifive/src/main/webapp/src/h5.ui.jqm.manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

var EV_NAME_H5_JQM_PAGE_HIDE = 'h5jqmpagehide';
var EV_NAME_H5_JQM_PAGE_SHOW = 'h5jqmpageshow';
var EV_NAME_EMULATE_PAGE_SHOW = 'h5controllerready.emulatepageshow';

// =============================
// Production
Expand Down Expand Up @@ -135,7 +136,7 @@
*
* @type Boolean
*/
var showEventFired = false;
var showEventFiredBeforeReady = false;

// =============================
// Functions
Expand Down Expand Up @@ -269,14 +270,14 @@
that.loadScript(this.id);
});

var $activePage = this.$find('#' + activePageId);
var $page = this.$find('#' + activePageId);

// 初期表示時、トランジションにアニメーションが適用されていない場合、
// JQMコントローラがreadyになる前にpageshowが発火してしまいJQMコントローラが拾うことができないため、
// 既にpageshowが発火されていたら、h5controllerreadyのタイミングで、h5jqmpageshowをトリガする
$activePage.one('h5controllerready', function() {
if (showEventFired) {
$activePage.trigger(EV_NAME_H5_JQM_PAGE_SHOW, {
$page.one(EV_NAME_EMULATE_PAGE_SHOW, function() {
if (showEventFiredBeforeReady && $page[0] === $.mobile.activePage[0]) {
$page.trigger(EV_NAME_H5_JQM_PAGE_SHOW, {
prevPage: $('')
});
}
Expand Down Expand Up @@ -373,6 +374,7 @@
* @memberOf JQMController
*/
'{rootElement} pageshow': function(context) {
var emulatePageShow = false;
var $target = $(context.event.target);
var $fromPage = context.evArg ? context.evArg.prevPage : $('');
var conAr = controllerInstanceMap[$target[0].id];
Expand All @@ -384,19 +386,25 @@
// JQMマネージャが管理する静的コントローラがイベントを受け取れない状態なので、h5controllerready後にh5jqmpageshowをトリガするようにする
// トランジションのアニメーションが無効(同期でJQMのイベントが発生する)場合のみここに到達する
if (!controllerInstance.isReady) {
$target.one('h5controllerready', function() {
$target.trigger(EV_NAME_H5_JQM_PAGE_SHOW, {
prevPage: $fromPage
});
});
$target.unbind(EV_NAME_EMULATE_PAGE_SHOW).one(EV_NAME_EMULATE_PAGE_SHOW,
function() {
if ($.mobile.activePage[0] === $target[0]) {
$target.trigger(EV_NAME_H5_JQM_PAGE_SHOW, {
prevPage: $fromPage
});
}
});
emulatePageShow = true;
break;
}
}
}

$target.trigger(EV_NAME_H5_JQM_PAGE_SHOW, {
prevPage: $fromPage
});
if (!emulatePageShow) {
$target.trigger(EV_NAME_H5_JQM_PAGE_SHOW, {
prevPage: $fromPage
});
}
},
/**
* h5controllerboundイベントを監視しコントローラインスタンスを管理するためのイベントハンドラ
Expand Down Expand Up @@ -637,7 +645,7 @@

// 初期表示時、JQMマネージャがreadyになる前にpageshowイベントが発火したかをチェックする
$(document).one('pageshow', function() {
showEventFired = true;
showEventFiredBeforeReady = true;
});

$(function() {
Expand Down Expand Up @@ -758,8 +766,8 @@
cssMap = {};
initCalled = false;
hideEventFired = false;
showEventFired = false;
showEventFiredBeforeReady = false;
}
/* del end */
});
})();
})();
Loading

0 comments on commit b19a7c5

Please sign in to comment.