jQuery Mobileの初期化イベントが微妙

jQuery Mobileではpage="ID"の要素がページとして認識されます。

ページなのでjQuery Mobile APIが使えます。

jQuery Mobile APIとは初期化メソッドとかchangePageとかのアレです。

この初期化イベント、使ってみてわかったんですが結構厄介でした。

・たとえば一番最初に読み込まれるページ(index.htmlの一番上のpage="ID"のセクション)だとそもそも初期化イベントが呼ばれない。
起点になるページが#topだとすると、$("top").on("showpage",f(){})や$("top").on("createpage",f(){})が発火しない(1.1で確認)。
※"showpage"が評価されるのは再度#topを表示した時から。

・"pagebeforeshow"イベントでAJAX通信して準備して、"pageshow"で表示イベントを設定したとします。
$.mobile.changePage(#hoge)すると"pageshow"は評価されるけど"pagebeforeshow"は評価されないので、動的コンテンツが反映されない、もしくは最悪の場合前回表示された結果が再度表示される。

・"pageshow"とか一連のページ系初期化処理、dialogの表示非表示でも評価される。
 ダイアログを閉じるとそのページの"pageshow"が再度実行されてアッーとなる。

とまあ、ちょっといじっただけでもこれだけのトラップが待ってます。
jQuery Mobileだとテンプレート用意しなくていいのは魅力だけど、ちょっと盛りすぎてて使いどころを考えないと結構苦労する。
あとpage()の挙動が微妙。

ちなみにjQuery Mobile + Phonegapだとクリックの反応が鈍くなります。iOSだと大丈夫なのにな。
しかもjQuery Mobileの特徴の一つであるtransitionのほとんどがアンドロイドブラウザで動かない。
よく聞くjQuery MObile+Phonegapでアプリ作ろう!っていうのはちょっとちゃんと考えないと後々大変なことになるよ(自戒)