我試圖做一個與backbone.js匹配的路線'/ object /:id'骨幹網可以創建一條匹配所有以某些東西開頭的網址的路線嗎?
問題是,我可以接收到包含任何東西的參數,包括斜線,然後骨幹不認識這個URL:/object/1337?var = /嘿
我可以忽略get參數或簡單地說我想讓我的路線以'/ object /:id?'開頭。 ?
謝謝。
我試圖做一個與backbone.js匹配的路線'/ object /:id'骨幹網可以創建一條匹配所有以某些東西開頭的網址的路線嗎?
問題是,我可以接收到包含任何東西的參數,包括斜線,然後骨幹不認識這個URL:/object/1337?var = /嘿
我可以忽略get參數或簡單地說我想讓我的路線以'/ object /:id?'開頭。 ?
謝謝。
終於找到了解決辦法,也許有點難看
initialize : function() {
this.route(/^object\/([^\?]*)\?/, "show", this.show);
}
這並不難看,這就是[route](http://documentcloud.github.com/backbone/#Router-route)的作用,Backbone只是將路由表翻譯爲內部路由。 – 2012-01-06 18:49:37
我相信這會爲你工作:
'/對象/:ID/*圖示'
你的 '身份證'參數仍然會匹配你的id,最後的'splat'將匹配最後附加的任何內容。它甚至一無所獲。所以如果你想在沒有任何獲取參數的情況下觸發這條路線,那麼'/ object/1337 /'將起作用。注意最後的斜線。它必須在那裏。
你的原始鏈接/ object/1337?var =/hey也應該觸發這條路線。
編輯:您可以在
http://documentcloud.github.com/backbone/#Router-routes
編輯編輯閱讀提示圖標:您的原始鏈接將與新的斜槓您的帳號和工作之間的「?」
/對象/ 1337/VAR = /哎
我用下面這個:
// 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);
如果你想要的是從片段中分離參數,我建議使用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' }
}
你能URL編碼參數? – 2012-01-06 14:45:12