2013-11-14 19 views
6

tôi cần phải được điều này để làm việc:Backbone router với nhiều tham số

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

showProductDetail không bao giờ được gọi trong khi ': Sản phẩm' tuyến đường được thiết lập ngay cả khi nó được thiết lập sau đó. Tôi đã thử như sau

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

Nhưng điều này sẽ không được gọi khi chỉ thay đổi tham số thứ hai. Điều quan trọng là tôi có sản phẩm hoặc sản phẩm và chi tiết trong url.

Có ai biết cách sửa lỗi này không?

Trả lời

16

Có một giải pháp nhỏ để giải quyết vấn đề của bạn. Tôi có một cảm giác có một cách tốt hơn để làm điều này nhưng điều đó sẽ hoạt động:

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

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

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

} 
+0

Trong trường hợp này, cách tiếp cận của bạn sẽ hoạt động nhưng như tôi đã nói tôi cũng muốn có sản phẩm trong tuyến đường thứ hai để tôi có thể thực hiện một số việc như: mywebsite.com/#category/1/product/3/detail/1 – matteok

+0

Tôi đã cập nhật câu trả lời của mình. Đây có phải là những gì bạn đang tìm kiếm? –

+0

Điều này không hiệu quả nếu tôi chỉ gọi mywebsite/com/# product/1 phải không? – matteok

1

Trả lời muộn (hơn một năm) .. nhưng bạn có thể sử dụng RegEx trong bộ định tuyến đường trục để đạt được điều này. Ví dụ của tôi giả định các tham số sẽ bắt đầu bằng một số.

ví dụ: 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); 
    } 
}); 

Hope this helps.

Các vấn đề liên quan