[英]Meteor.js Iron Router and similar or dynamic routes
我正在嘗試為我的網站上的管理部分構建動態路由,以便“/ admin”和“/ admin / users”以及“/ admin / users / add”等工作。 我嘗試了一些不同的組合,但仍然在努力解決這個問題。 以下是我嘗試過和不同的事情。
理想情況下,如果我可以指定“/ admin”但動態引用每個new /作為最適合在代碼中處理的參數。 示例“/ admin / 1/2/3/4/5”並且能夠引用1 2 3等我雖然在文檔中沒有看到這樣的內容。
Router.route('/admin', {
name: 'admin',
path: '/admin',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
Session.set('apage', 'dashboard');
Session.set('asect', null);
this.render();
}
});
// Not Working...
Router.route('/admin/:apage', {
name: 'admin',
path: '/admin/:apage',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
Session.set('apage', this.params.apage);
Session.set('asect', null);
this.render();
}
});
// Not Working...
Router.route('/admin/:apage/:asect', {
name: 'admin',
path: '/admin/:apage',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
Session.set('apage', this.params.apage);
Session.set('asect', this.params.asect);
this.render();
}
});
編輯(已回答)
經過一些測試后,似乎應該(或最簡單地完成)在this.render()
行中調用模板,並且路由應該從最嚴格/詳細到最少 - 我之前嘗試過。 問題似乎是在template:
上使用this.params
template:
line。 這個解決方案並不完美,但可以針對可能遇到類似問題的任何人發布。 對於像“/ admin / 1/2/3/4/5”這樣的網址中的其他變量,似乎他們需要額外的路由而且不能完全動態,因為“/”不能進入參數和路由器會查找路由並返回notFound,除非您可以顯式匹配路由。 可能有一個我沒找到的解決方法。
工作代碼如下:
Router.route('adminPage', {
path: '/admin/:asect/:apage',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
Session.set('asect', this.params.asect);
Session.set('apage', this.params.apage);
this.render('admin_' + this.params.asect + '_' + this.params.apage);
}
});
Router.route('adminSect', {
path: '/admin/:asect',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
Session.set('asect', this.params.asect);
Session.set('apage', null);
this.render('admin_' + this.params.asect);
}
});
Router.route('admin', {
path: '/admin',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
Session.set('asect', 'dashboard');
Session.set('apage', null);
this.render('admin_dashboard');
}
});
有一種方法可以在路線中有可選參數(除非我弄錯了,否則你正在尋找它)。 考慮到這一點,您應該能夠使用一個路由器進行管理。
Router.route('admin',{
path: '/admin/:asect?/:apage?',
template: 'admin',
layoutTemplate: 'layout_admin',
action: function() {
var asect = this.params.asect || 'dashboard',
apage = this.params.apage || null,
render = (function(){
if(apage !== null) {
return 'admin_'+ asect +'_'+ apage;
} else {
return 'admin_'+ asect;
}
})();
Session.set('asect', asect);
Session.set('apage', apage);
this.render(render);
}
});
的?
在path
每個參數將其指定為可選參數之后。 您應該能夠檢查它是否已定義或以其他方式分配默認值,然后相應地構建您的視圖和會話。
注意:您可以在此MeteorPad中進行測試 - 只需根據示例模板的名稱更新URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.