ページを変更するときに、すべてのイベントのバインドを解除したい。ビューの close 関数をthis.unbind() 呼び出しで拡張するこのソリューションを採用し、ここからルーターの changePage 関数で JQM ページ遷移と組み合わせようとしました。
changePage: function(page){
$(page.el).attr("data-role", "page");
page.render();
$("body").append($(page.el));
var transition = $.mobile.defaultPageTransition;
if(this.firstPage){
transition = "none",
this.firstPage = false;
}
$.mobile.changePage($(page.el), {changeHash: false, transition: transition});
}
次に、changePage は次のようになります。
changePage: function(page){
if (this.currentView)
this.currentView.close();
$(page.el).attr("data-role", "page");
this.currentView = page;
page.render();
$("body").append($(page.el));
var transition = $.mobile.defaultPageTransition;
if(this.firstPage){
transition = "none",
this.firstPage = false;
}
$.mobile.changePage($(page.el), {changeHash: false, transition: transition});
}
しかし、その後、JQM エラーが発生します。
Uncaught TypeError: Cannot call method '_trigger' of undefined jquery.mobile-1.1.0.js:2788
transitionPages jquery.mobile-1.1.0.js:2788
$.mobile.changePage jquery.mobile-1.1.0.js:3390
window.AppRouter.Backbone.Router.extend.changePage
pagehide イベントでページの DOM を削除する jqm-config.js もあります。ここですべてのイベントを次のようにバインド解除でき$(event.currentTarget).unbind();
ますか? しかし、これもうまくいきません。
$('div[data-role="page"]').live('pagehide', function (event, ui) {
$(event.currentTarget).remove();
});