2015-05-05 211 views
0

我有一些主幹和路由問題。骨幹路由和#

下面的代碼:

//routing 
    var AppRouter = Backbone.Router.extend({ 
     routes: { 
      "":"home", 
      "example": "example", 
      "example/:data": "example_data" 
     }, 
     home: function(){ 
      alert('home'); 
     }, 
     example: function(){ 
      alert('example'); 
     }, 
     example_data: function(data){ 
      alert('example '+data); 
     } 
    }); 

    var app_router = new AppRouter(); 
    //Backbone.history.start({pushState: true}); 
    Backbone.history.start(); 

現在,如果我去根網址:

file:///Users/my_user/workspace/project/index.html 

我可以看到警報 '家'。 如果我的網址更改爲

file:///Users/my_user/workspace/project/index.html#example 

我可以看到警報「示例」,如果我的網址更改爲:

file:///Users/my_user/workspace/project/index.html#example/something 

我可以看到警報「例如什麼」。

現在我有兩個問題:第一個是我真的很感謝刪除'#'符號並使用'/'代替。第二個問題是,如果我分解這一行代碼:

//Backbone.history.start({pushState: true}); 

警報不再工作了。我該如何解決這個問題?

下面是該項目的全碼:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>App</title> 
    </head> 
    <body> 
     <div id='test-routing'><a href='#example'>example</a></div> 
     <div id='test-view'></div> 

     <script src="lib/jquery-2.1.3.min.js"></script> 
     <script src="lib/underscore-min.js"></script> 
     <script src="lib/backbone-min.js"></script> 
     <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.26.min.js"></script> 

     <script> 

     //routing 
     var AppRouter = Backbone.Router.extend({ 
      routes: { 
       "":"home", 
       "example": "example", 
       "example/:data": "example_data" 
      }, 
      home: function(){ 
       alert('home'); 
      }, 
      example: function(){ 
       alert('example'); 
      }, 
      example_data: function(data){ 
       alert('example '+data); 
      } 
     }); 

     var app_router = new AppRouter(); 
     Backbone.history.start({pushState: true}); 
     //Backbone.history.start(); 

     </script> 
    </body> 
</html> 

回答

0

你的第一個問題,我相信你是從主題標籤擺脫你的網址,在正確的道路上,你可以使用HTML5 pushState的這一點。

一些幫助是:

http://artsy.github.io/blog/2012/06/25/replacing-hashbang-routes-with-pushstate/

關於你的第二個問題,你的應用好好嘗試一下的理由,如果你刪除

//Backbone.history.start({pushState: true}); 

開始是因爲骨幹路由器沒有按沒有開始,所以它不會監聽hashchange(或pushstate)事件,所以它不會調用你的路由器功能,然後(可能)渲染一個視圖。

您需要運行Backbone.history.start以使您的路由器執行任何操作。

您是否評論過其他Backbone.history.start調用?你有沒有記錄任何錯誤?

我希望這有助於

編輯:

我想這應該小提琴幫助你: http://jsfiddle.net/sn21jg3x/

祝你好運,告訴我,如果這個工程。

+0

是的,我評論了另一行代碼!我不能做一個jsfiddle,但我已經用項目的代碼更新了第一個答案! – ste

+0

我想我找到了解決問題的辦法,現在我會更新我的答案。 – rikudesu

+0

謝謝,我添加了你給我的代碼,'#'的問題解決了,另一方面,如果我用我的項目上的鏈接/按鈕導航,我可以看到鏈接改變'/'(www .project.com - > www.project.com/resource),但如果我直接粘貼諸如www.project.com/resource之類的東西,則什麼也找不到。 – ste