具有多个参数的骨干路由器

时间:2013-11-14 12:28:28

标签: javascript url backbone.js router hashtag

我需要让它工作:

routes: {
  ':product' : 'showProduct',
  ':product/:detail': 'showProductDetail'

showProductDetail在设置':product'路由时永远不会被调用,即使之后设置了它。我尝试了以下

routes: {
  ':product(/:detail)': showProductOrDetail
}

但是只有第二个参数改变时才会调用它。 我必须拥有产品本身或网址中的产品和详细信息

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:17)

你的问题有一点hacky解决方案。我觉得有一种更好的方法可以做到这一点,但这应该有效:

routes: {
    "product/:id": "showProduct",
    "product/:id/details/:did": "showDetails"
},

showProduct: function(id) {
    this.showDetails(id);
},

showDetails: function(id, did) {
    // Check did for undefined

}

答案 1 :(得分:1)

迟到的响应(超过一年)..但您可以在骨干路由器中使用RegEx来实现此目的。 我的例子假设参数将以数字开头。

ie:localhost:8888 / #root / 1param / 2param

var router = Backbone.Router.extend({
    initialize: function () {
        // Use REGEX to get multiple parameters
        this.route(/root/, 'page0'); 
        this.route(/root\/(\d+\S+)/, 'page1'); 
        this.route(/root\/(\d+\S+)\/(\d+\S+)/, 'page2');
    },
    page0:function(){
        console.log("no id");
    },
    page1:function(id1){
        console.log(id1);
    },
    page2:function(id1,id2){
        console.log(id1);
        console.log(id2);
    }
});

希望这有帮助。