我想在更改页面时取消绑定所有事件。我采用了这个解决方案,它通过 this.unbind() 调用扩展了 View 的 close 函数,并尝试将它与路由器中的 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
我还有 jqm-config.js,它在 pagehide 事件中删除页面的 DOM。我可以在这里取消绑定所有事件,例如:$(event.currentTarget).unbind();
?但这也不起作用。
$('div[data-role="page"]').live('pagehide', function (event, ui) {
$(event.currentTarget).remove();
});