之前使用jqm開發,從做項目開始的時候這個問題(error loading page)就一直存在,而且一直是以一種神奇的方式存在,有時候會突然蹦出來,重新刷新一下又消失了,所以這個問題都一直拖着,直到最後實在要發版本了不能再拖了,總不能讓別人在手機上刷新頁面吧。
最後在jquery.mobile.js文件中調試的時候,終於發現了問題,因爲我們整合了進了backbone,所以我們的頁面跳轉方式不用默認的jqm的頁面跳轉,所以在jqm.config.js中的mobileinit事件中加入了
$.mobile.linkBindingEnabled = false;禁掉了默認的jqm的頁面跳轉方式,才能使用backbone的方式,
$(document).bind("mobileinit", function () {
console.log("configure jqm");
$.mobile.ajaxEnabled = false;
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
$.mobile.pushStateEnabled = false;
$.mobile.defaultPageTransition = 'slide';
$.mobile.buttonMarkup.hoverDelay = "false";
$.mobile.transitionFallbacks.slideout = "none";
// Remove page from DOM when it's being replaced
$.mobile.pageLoadErrorMessage = 'Sorry, something went wrong. Please try again.';
$(document).on('pagehide', 'div[data-role="page"]', function (event, ui) {
//移除下拉監聽事件
$(document).off("pageinit", "div.pull-demo-page");
$(event.currentTarget).remove();
});
});
我們發現出於某種原因這種跳轉方式有時候又沒有被禁掉,而jqm的這種頁面跳轉方式沒被禁掉的時候,在backbone中頁面切換就會有error loading page的問題,最後定位問題是在jqm.config.js加載順序不對,我們並沒有在最開始加載這個文件,最後的解決方案是我們在main.js中如下處理
require(['app', 'jqmconfig'], function (app,jqmconfig) {
app.initialize();
});
我們在上面代碼中加了jqmconfig,這是jqm.config.js的引入後的文件名,表示我們在開始的時候就加載jqm.config.js文件,即綁定mobileinit事件,問題就解決了。