2013-11-14 26 views
6

Ben bu işe almak gerekir: ': Ürün' rota sonradan ayarlanmış olsa bile belirlenirken,Omurga yönlendiricisi

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

showProductDetail çağrılan olmadı. Aşağıdaki yalnızca, ikinci parametre değiştiğinde bu çağrılmayacaktır. Ürünün kendisinin veya ürün ve detayının url ürününde olması önemlidir.

Bunu nasıl düzelteceğini bilen var mı?

cevap

16

Sorununuza biraz rahatsız edici bir çözüm var. (Bir yıldan fazla)

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

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

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

} 
+0

Bu durumda yaklaşımınız işe yarayacaktı, ancak ürüne ikinci rotada da sahip olmak istediğimi söylediğim gibi, şöyle bir şey yapabilirim: mywebsite.com/#category/1/product/3/detail/1 – matteok

+0

Cevabımı güncelledim. Aradığınız bu mu? –

+0

Sadece mywebsite/com/# ürün/1 hakkımı çağırırsam bu işe yaramıyor mu? – matteok

1

bir geç yanıt .. ama bunu başarmak için bir omurga yönlendirici içinde RegEx kullanabilirsiniz: Orada bunu yapmak için güzel bir yoldur ama bu çalışması gerekir bir his var. Örneğim, parametrelerin bir sayı ile başlayacağını varsayar.

yani: localhost: 8888/# kök bu yardımcı olur/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); 
    } 
}); 

Umut.