2016-04-12 87 views
0

我試圖做這樣的事情在我的路線:灰燼嵌套的全球航線服務(通配符)

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

產品路線:

offerPath: function(params){ 
     this.transitionTo('product.promotion', params); 
    } 

的問題是,它並不重要我訪問的推廣,應用程序認爲是產品路線的一部分。 我該怎麼做?我需要他們嵌套。

+0

是選擇產品ID? –

+0

簡短的回答是,你不能,因爲glob是貪婪的,並且會匹配一切直到路徑的盡頭,就像你看到的一樣。 – locks

回答

1

更新: 您可以在路由器中使用beforeModel(transition) hook來檢查url中的內容。

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

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" 
    } 

}); 

至少你有網址的其餘部分是這樣,你可以過濾掉的重要信息,並與this.transitionTo()重定向到的確切地點。


你可以有以下途徑:

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

http://example.com/products/awesome_souce/promotions/monday_deal 

在第一種情況下,你的路線是這樣的:

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

在第二種情況,可能是這樣的:

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

最後,你的路線處理程序可以下載正確的模型(例如,對於第一種情況):

// 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); 
    } 
}); 

如果您只需要在product路線帕拉姆,而不是返回全程記錄,例如,您可以僅使用return params.product_name,因此您可以在子路由級別訪問this.modelFor('product')的字符串。

+0

謝謝佐爾坦!探針是我的路線更復雜。 例如,對於產品: 'http:// example.com/products/manufacturer-209/series-881/tag-17143/none/494822/flawless' 對於報價: 'http://example.com/products/manufacturer-209/series-881/tag-17143/none/494822/flawless/promotions/494822-flawless-working' 我嵌套了路線,它工作的很好,但是當我重新加載促銷網址,我在產品路線中的應用程序東西 – Wesley

+0

謝謝!這就是我正在尋找的東西 – Wesley