2012-01-06 46 views

回答

4

終於找到了解決辦法,也許有點難看

initialize : function() { 
    this.route(/^object\/([^\?]*)\?/, "show", this.show); 
} 
+0

這並不難看,這就是[route](http://documentcloud.github.com/backbone/#Router-route)的作用,Backbone只是將路由表翻譯爲內部路由。 – 2012-01-06 18:49:37

3

我相信這會爲你工作:

'/對象/:ID/*圖示'

你的 '身份證'參數仍然會匹配你的id,最後的'splat'將匹配最後附加的任何內容。它甚至一無所獲。所以如果你想在沒有任何獲取參數的情況下觸發這條路線,那麼'/ object/1337 /'將起作用。注意最後的斜線。它必須在那裏。

你的原始鏈接/ object/1337?var =/hey也應該觸發這條路線。

編輯:您可以在

http://documentcloud.github.com/backbone/#Router-routes

編輯編輯閱讀提示圖標:您的原始鏈接將與新的斜槓您的帳號和工作之間的「?」

/對象/ 1337/VAR = /哎

+0

它匹配,但ID等於1337?var = /嘿 – Intrepidd 2012-01-06 14:47:09

+0

是檢查我的'編輯編輯'。你需要在'1337 /?'之間的斜線爲了讓你所有的參數都包含在摔跤圖中。 – Mike 2012-01-06 14:52:12

+0

所以無論如何。無論你是否得到params,你都會在你的id後面加上'/'。 – Mike 2012-01-06 14:53:11

0

我用下面這個:

// Call for Backbone to make the route regexp 
var route = Backbone.Router._routeToRegExp(route_string); 
// Change the regexp to ignore GET parameters 
route = new RegExp(route.source.replace(/\$/, "\\\/?(?:(\\\?.*$))*$"); 
// Create a route with a new regexp 
// Backbone will not try to make a regexp from the route argument if it's already a RegExp object 
this.route(route, name, callback); 
0

如果你想要的是從片段中分離參數,我建議使用backbone-query-params

您可以使用常見的Backbone路由,插件會將GET參數解析爲一個對象,然後傳遞給路由處理函數。

從插件的Github上頁:

routes: { 
    'object/:id': 'myRoute' 
} 
... 
myRoute: function(id, params) { 

    // if the routed url is '/object/1337?var=/hey' 
    console.log(id);  // ---> '1337' 
    console.log(param); // ---> { var : '/hey' } 

} 
相關問題