PhoneGap / Cordova与客户端路由?

时间:2014-09-16 19:23:21

标签: javascript jquery ios cordova

我继承了运行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上使用客户端路由?我做错了什么?

1 个答案:

答案 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>';
            }
        });