8

我需要让它工作:

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

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

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

但是当只有第二个参数发生变化时,这不会被调用。重要的是我有产品本身或url 中的产品和详细信息

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

4

2 回答 2

17

您的问题有一个小技巧。我觉得有一种更好的方法可以做到这一点,但这应该可行:

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

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

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

}
于 2013-11-14T12:35:44.970 回答
3

延迟响应(超过一年).. 但您可以在骨干路由器中使用 RegEx 来实现这一点。我的示例假定参数将以数字开头。

即:本地主机: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);
    }
});

希望这可以帮助。

于 2015-10-19T16:41:33.707 回答