骨干路由器问题

时间:2012-02-25 20:49:48

标签: javascript jquery backbone.js

我有一个路由器可以很好地进行网站导航,并且在点击浏览器后退/前进按钮时也可以正常工作。但是,当直接输入URL时,我得到404。

这是我的路由器:

define(function(require) {
var $         = require('jquery'),
    _         = require('underscore'),
    Backbone  = require('backbone');

var AppRouter = Backbone.Router.extend( {

    routes: {
        'home'       : 'homeHandler',
        'webdesign'  : 'webHandler',
        'mobile'     : 'mobileHandler',
        'javascript' : 'javascriptHandler',
        'hosting'    : 'hostingHandler',
        'contact'    : 'contactHandler'
    },

    initialize: function() {
        this._bindRoutes();
        $('.link').click(function(e){
            e.preventDefault();
            Backbone.history.navigate($(this).attr("href"),true);
        });
        if(history && history.pushState) {
            Backbone.history.start({pushState : true});
            console.log("has pushstate");
        } 
        else {
            Backbone.history.start();
            console.log("no pushstate");
        }
        console.log("Router init with routes:",this.routes);
    },

    homeHandler: function(e) {
        require(['../views/home-content-view', '../views/home-sidebar-view'],
            function(HomeContent, HomeSidebar) {
                var homeContent = new HomeContent();
                homeContent.render();
                var homeSidebar = new HomeSidebar();
                homeSidebar.render();
        });
    },

    webHandler: function(e) {
        require(['../views/web-content-view', '../views/web-sidebar-view'],
            function(WebContent, WebSidebar) {
                var webContent = new WebContent();
                webContent.render();
                var webSidebar = new WebSidebar();
                webSidebar.render();
        });
    },

    ...

});

return AppRouter;
});

显然,我错过了一些东西。

非常感谢任何澄清。

谢谢, 斯蒂芬

1 个答案:

答案 0 :(得分:4)

Backbone在网页上运行(已经在浏览器中加载)。当您直接在浏览器中输入URL时,您正在向服务器发出该URL的HTTP请求。服务器不受Backbone管理。您必须在服务器上定义遇到此类HTTP请求时的行为。