2013-03-05 74 views
1

我使用meteor-router程序包在我的應用程序中設置路線。但是,我需要能夠「動態」設置一些路線。這意味着我有一些「靜態」路由和一些「動態」,它們根據某些變量(特別是URL的一部分)而變化。
例如,如果用戶訪問www.example.com/foo,我的路線應在foo前加上所有網址,如果用戶訪問www.example.com/bar,所有路線都應該有bar前綴。在Meteor中動態創建路線

僞代碼:

Meteor.subscribe('bar', function(){ 
    var prefix = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1'); 

    // "dynamic" routes, generated after 'subscribe' is ready 
    Meteor.Router.add({ 
    prefix+'/': function() { 
     // some code 
     return 'mainTemplate'; 
    }, 
    prefix+'/welcome': 'welcome', 
    prefix+'/foo': 'foo', 
    prefix+'/bar': 'bar' 
    }); 
)}; 

// "static" routes, independent of current URL 
Meteor.Router.add({ 
    '/': 'home', 
    '/admin': 'admin' 
}); 

回答

1

你上面的設置應該工作,只改變每個路由有/前綴

Routes = {} 

Routes['/' + prefix + '/welcome'] = function() { return 'welcome' }; 
Routes['/' + prefix +' /foo'] = 'foo'; 
... 

Meteor.Router.add(Routes); 
+0

它不會這樣的。在你的例子中,如果我嘗試在'Meteor.Router.add()'方法中直接連接,會出現一個錯誤:'SyntaxError:Unexpected token +'。如果我在Meteor.Router.add()之前嘗試使用這個變量,並將該變量賦值爲某個URL,則什麼也不會發生......事實上,我關於「動態」設置路由(在訂閱準備就緒後)的想法可能會不像我想象的那樣工作,但仍然無法在我的路線中使用前綴工作來獲得這個東西。 – errata 2013-03-05 13:01:15

+0

我已經更新了一點,它應該使用'[]'方式來聲明密鑰 – Akshat 2013-03-05 13:32:48

+0

Yap,現在可以工作了......我在定義密鑰時嘗試使用'[]',但是我試圖把他們在'Meteor.Router.add()'...你的解決方案發生在我身上,但我沒有真正嘗試過:)謝謝! – errata 2013-03-05 13:46:27