2013-11-14 4 views
6

мне нужно, чтобы получить эту работу:Backbone маршрутизатор с несколькими параметрами

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

showProductDetail никогда не вызывается, а «: продукт» маршрут установлен, даже если он установлен впоследствии. Я попробовал следующее:

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

Но это не будет вызвано, когда изменится только второй параметр. Важно, чтобы у меня был сам продукт или продукт и деталь в адресе.

Кто-нибудь знает, как это исправить?

ответ

16

В вашей проблеме есть небольшое хакерское решение. У меня есть чувство, что это красивый способ сделать это, но это должно работать:

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

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

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

} 
+0

В этом случае ваш подход будет работать, но, как я уже сказал, я хочу иметь продукт на втором маршруте, поэтому я могу сделать что-то вроде: mywebsite.com/#category/1/product/3/detail/1 – matteok

+0

Я обновил свой ответ. Это то, что вы ищите? –

+0

Это не работает, если я позвоню только по адресу mywebsite/com/# product/1? – matteok

1

Поздний ответ (в течение года) .. но вы можете использовать регулярные выражения в магистральном маршрутизаторе для достижения этой цели. В моем примере предполагается, что параметры начинаются с числа.

то есть: локальный: 8888/# корня/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); 
    } 
}); 

Надеется, что это помогает.

Смежные вопросы