2012-02-25 5 views
3

У меня есть маршрутизатор, который прекрасно работает с сайтом, а также работает при нажатии кнопки браузера назад/вперед. Однако при входе непосредственно в 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; 
}); 

Очевидно, что я пропускаю что-то.

Любые разъяснения были бы весьма признательны.

Спасибо, Stephan

+0

В качестве побочного примечания: обработчики 'homeHandler' и' webHandler' почти идентичны. Подумайте о слиянии их с одним обработчиком ... –

+0

Не могли бы вы привести пример? Какой URL-адрес вы вводите напрямую? –

+0

mydomain.com/webdesign например – bardu

ответ

4

Магистраль работает на веб-странице (которая уже загружена в браузере). Когда вы вводите URL-адрес в браузере напрямую, вы делаете HTTP-запрос для этого URL-адреса на сервер. Сервер не управляется Backbone. Вы должны определить на сервере поведение, когда такие HTTP-запросы встречаются.

Смежные вопросы