PhoneGapとjQueryMobileで構築しているモバイルアプリがあります。ユーザーがリンクをクリックすると、アプリはSQLiteデータベースから動的コンテンツをフェッチします。データは、jQMの折りたたみ可能なセット(アコーディオン)でフォーマットされています。これがコードです。
ユーザーが適切なページに移動するためのメニュー:
<!-- data-role="page" id="mainmenu" -->
<ul data-role="listview" data-theme="c">
<li><a id="news_link" href="#"> News</a></li>
<li><a id="news_link" href="#"> Jokes</a></li>
<li><a id="news_link" href="#"> Rumours</a></li>
</ul>
<!-- data-role="page" id="mainmenu" -->
<div data-role="page" id="news" data-title="AreApp News" data-theme="c">
<div data-role="header" data-theme="c"></div><!-- /header -->
<div id="newscontent" data-role="content" data-content-theme="c"></div>
<div data-role="footer"></div>
</div>
以下では、クリックされた要素のIDによるクリックイベント検出を使用し、コンテンツをフェッチして正しいdivに配置するデータベース読み込み関数を呼び出します。
$(function() {
$('#news_link').click(function(){ // event handler of newslink
loadNewsFromDB(function(){
$.mobile.changePage( $("#news"), { transition: "slideup"}
);
});
});
function loadNewsFromDB(callback){
//DB-logic and html code generation here....
$(htmlStr).appendTo( "#newscontent" ).trigger( "create" );
$("#newscontent").html(htmlStr);
}
初めてリンクをクリックしたとき、ロジックは非常にうまく機能します。しかし、携帯電話の「戻る」ボタンを押してメインメニューに戻り、リンクをもう一度クリックすると、コンテンツが正しくフォーマットされません。ニュースが表示されているということですが、折りたたみ可能なセットを使用する必要があるため、フォーマットは適切ではありませんが、そうではありません。
関数の使用をにバインドすることにより、jQueryのremove()関数とempty()関数を使用してコンテンツをクリアしようとしました
$(document).bind( "pagebeforechange", function( e, data ) {
var obj = $.mobile.path.parseUrl( data.toPage );
if(obj.hash=="#mainmenu"){
$('#news-collapsible').empty().remove();
}
});
しかし、結果はありません。私はこの挑戦にかなりこだわっています。誰かがこれでどこに行くべきか教えてくれたら、私は深く感謝します。