我继承了运行Cordova 3.4的Cordova / PhoneGap应用程序。我的第一个任务是实现客户端路由框架,以便更容易在页面之间导航。我选择Flatiron Director作为我的客户端路由器,但是当我去实现它时,我开始从应用程序中获得奇怪的功能。
我的第一个路由器设置:
var routing = {
testHandler: function(){
console.log('Route ran');
},
routes: function(){
return {
"/testhandler": testHandler
}
}
};
console.log('Routes added');
添加路由(至少基于控制台输出)。当我尝试命中/ testhandler哈希时,我收到一个"无法加载资源:file:/// testhandler"将window.location.hash设置为" / testhandler"时出错。我注意到" Route跑了"声明从未打印过。
我的下一次尝试是使用jQuery的hashchange事件。
$(window).on('hashchange', function(){ console.log('Ran'); });
在这次尝试中,无论我将哈希值更改为什么,我都会看到' Ran'输出,但我仍然收到"无法加载资源:"错误。
这是PhoneGap / Cordova的问题吗?还是我们的实施?是不是可以在Cordova上使用客户端路由?我做错了什么?
答案 0 :(得分:0)
我知道这不会直接回答您的问题,但您可以考虑制作自己的临时路由器。这可以帮助您调试应用程序并找出问题所在。
例如:
var router = (function (routes) {
var onRouteChange = function () {
// removes hash from the route
var route = location.hash.slice(1);
if (route in routes) {
routes[route]();
} else {
console.log('Route not defined');
}
};
window.addEventListener('hashchange', onRouteChange, false);
return {
addRoute: function (hashRoute, callback) {
routes[hashRoute] = callback;
},
removeRoute: function (hashRoute) {
delete routes[hashRoute];
}
};
})({
route1: function () {
console.log('Route 1');
document.getElementById('view').innerHTML = '<div><h1>Route 1</h1><p>Para 1</p><p>Para 2</p></div>';
},
route2: function () {
console.log('Route 2');
document.getElementById('view').innerHTML = '<div><h1>Route 1</h1><p>Para 1</p><p>Para 2</p></div>';
}
});