2016-04-12 61 views
0

benim güzergah böyle bir şey yapmaya çalışıyorum:Kor iç içe küresel yolları (Joker)

this.route('products', { path: "/products/*choises"}, function() { 
    this.route('promotion', {path: "/promotion/*offers"}); 
}); 

ürün rota:

sorun önemli değil yani
offerPath: function(params){ 
     this.transitionTo('product.promotion', params); 
    } 

Ziyaret ettiğim tanıtım, uygulamanın ürün rotasının bir parçası olduğunu düşünüyor. Bunu nasıl yapabilirim? İç içe olmalarına ihtiyacım var.

+0

seçenekleri ürün kimlikleridir? –

+0

Kısa cevap yapamazsınız çünkü glob açgözlüdür ve gördüğünüz gibi, yolun sonuna kadar her şeyle eşleşir. – locks

cevap

1

Güncelleme: URL'de neler olduğunu kontrol etmek için yönlendiricide beforeModel(transition) kancasını kullanabilirsiniz.

http://example.com/products/manufacturer-209/series-881/tag-17143/none/494822/f kanunsuz

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    beforeModel(transition) { 
    console.log(transition.params.products.choises) 
    // if you use this url: http://example.com/products/manufacturer-209/series-881/tag-17143/none/494822/f‌​lawless 
    // console log would be: "manufacturer-209/series-881/tag-17143/none/494822/f‌​lawless" 
    } 

}); 

En azından ne önemli bilgileri filtrelemek ve yeri ayarlamaya this.transitionTo() ile yönlendirebilirsiniz, böylece url'nin dinlenme var.


Aşağıdaki rotayı olabilir:

http://example.com/products/123/promotions/456 

veya

İlk durumda
http://example.com/products/awesome_souce/promotions/monday_deal 

, rotanız şu şekilde görünecektir: In

this.route('product', { path: "/products/:product_id"}, function() { 
    this.route('promotion', {path: "/promotions/:promotion_id"}); 
}); 

ikinci durumda, belki bu gibi:

this.route('product', { path: "/products/:product_name"}, function() { 
    this.route('promotion', {path: "/promotions/:promotion_name"}); 
}); 

Son olarak, rotanız işleyicileri (ilk durum için örnek) uygun modeller indirebilirsiniz:

// app/routes/product.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    return this.store.findRecord('product', params.product_id); 
    } 
}); 

--- 

// app/routes/product/promotion.js 
import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    // you can get access to the parent route model if you need for the api query 
    const product = this.modelFor('product'); 
    return this.store.findRecord('promotion', params.promotion_id); 
    } 
}); 

Eğer product rotadan sadece param gerekiyorsa, bunun yerine bütün bir rekor döndürmek, örneğin sadece return params.product_name olabilir, böylece bir subroute düzeyinde this.modelFor('product') ile bir dizeye erişebilirsiniz.

+0

Teşekkürler Zoltan! Sorun, rotalarımın daha karmaşık olmasıdır. Örneğin, bir ürün için: 'http: // example.com/ürünler/üretici-209/series-881/etiket-17143/none/494822/kusursuz ' Ve bir teklif için: ' http:// example.com/products/209/series-881/tag-17143/none/494822/hatasız/promosyonlar/494822-kusursuz çalışma ' Rotaları yerleştirdim ve harika çalışıyor, ancak yeniden yüklediğimde promosyon url, app ürün yolunda olduğum şeyler – Wesley

+0

Teşekkür ederim! aradığım şey bu – Wesley