2012-08-01 160 views
0

獲取數據我有一個路由器的設置,像這樣:Backbone.js的 - 默認路由器,從URL

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "/agents/:id": "getAgent", 
     "/orders/:id": "getOrders", 
     "https://stackoverflow.com/users/:id": "getUsers", 
     '*path': 'defaultRoute' 

    }, 
    getAgent: function(id) { 
     ticketList.url = "/index.php/tickets/viewJSON/a"+id; 
    }, 
    getOrders: function(id) { 
     ticketList.url = "/index.php/tickets/viewJSON/o"+id; 
    }, 
    getUsers: function(id) { 
     ticketList.url = "/index.php/tickets/viewJSON/u"+id; 
    }, 
    defaultRoute: function() { 
     //(here needs to be the code) 
    } 

}); 

我用笨,所以當我訪問/index.php/agents/view/1103我需要強制ticketList.url/index.php/tickets/viewJSON/a1103 - 所述a/agent/採取(這將分別useragentorderuao之間改變,然後從任何所採取的ID落後於URL的view部分。

什麼是獲取默認路由從URL中獲取這些參數的最佳方式?從字面上拆分document.URL?

+0

默認的URL是什麼? – 2012-08-01 18:43:33

+0

看到我對下面的答案的評論,希望清除一些東西 – rickyduck 2012-08-02 08:04:57

回答

1

如果您將三條自定義路線整合到一條自定義路線,而不是將它們全部設置爲默認路線,則會更易於閱讀。

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     "/:resource/:id": "getResource" 
    }, 

    getResource: function(resource, id) { 
     ticketList.url = "/index.php/tickets/viewJSON/" + resource[0] + id; 
    } 
}); 

但請注意,這會匹配很多不同的網址,可能比您真正想要的要多。爲每個資源分開路由可能是一個更好的主意,並且將它們全部映射到相同的功能。

+0

爲輸入而歡呼,絕對有意義,但是在將來我將大規模地擴展每個功能。我想我可以做,如果內部的聲明。然而 - 這實際上並不回答我原來的問題:如果我訪問'http:// mysite.com/index.php/agents/view/1103'(它顯示一個codeigniter頁面),我需要模擬'/index.php/agents/view/1103 /#/ agents/1103',這樣Backbone.js路由器就會被觸發。 (這不是一個單一的頁面應用程序,它是一個多頁應用程序,我使用主幹來創建更整潔的代碼) – rickyduck 2012-08-02 08:04:42