更新: 您可以在路由器中使用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/flawless
// console log would be: "manufacturer-209/series-881/tag-17143/none/494822/flawless"
}
});
至少你有網址的其餘部分是這樣,你可以過濾掉的重要信息,並與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')
的字符串。
是選擇產品ID? –
簡短的回答是,你不能,因爲glob是貪婪的,並且會匹配一切直到路徑的盡頭,就像你看到的一樣。 – locks