2015-02-23 268 views
0

外部化路由路徑我有一個簡單陣營路由器處理程序:使用反應路由器

var routes = (
    <Route name="main" path="/" handler={require('./main')}> 
     <Route name="page1" path="/page1" handler={require('./page1')}/> 
     <Route name="page2" path="/page2" handler={require('./page2')}/> 
     <Route name="page3" path="/page3" handler={require('./page3')}/> 

     <DefaultRoute handler={require('./signin')}/> 
    </Route> 
); 

我想外部化第1頁,第2頁,第3頁在一個單獨的文件屬性(比如一個JSON文件)和迭代在路線內。事情是這樣的:

var routes = (
    <Route name="main" path="/" handler={require('./main')}> 
    _.each (routes, function(r) { 
     <Route name={r.name} path={r.path} handler={require(r.module)}/> 
    }); 

    <DefaultRoute handler={require('./main')}/> 
    </Route> 
); 

很顯然,我不能有路線之內這樣的結構,什麼是實現這一目標的方式做出反應?

或者有沒有辦法通過API改變路線?

對於如:

routes.addRoute({name: r.name, path: r.path, handler: r.module}) ? 

回答

1

我想你應該能夠jsx做到這一點,但有一個錯誤在你jsx語法。試試這個:

var routes = (
    <Route name="main" path="/" handler={require('./main')}> 
    { 
    _.each (routes, function(r) { 
     return <Route name={r.name} path={r.path} handler={require(r.module)}/>; 
    }); 
    } 
    <DefaultRoute handler={require('./main')}/> 
    </Route> 
); 
+0

謝謝你,那個語法做到了。雖然我不得不對原始代碼做一些修改,因爲Browserify無法動態加載require模塊(它會進行靜態分析)。 請參閱http://stackoverflow.com/questions/26434214/require-in-browserify-doesnt-work-variable-name。 因此,最終語法是handler = {r.module},其中r.module = require('page1') – vasya10 2015-02-24 00:57:37

2

反應路由器剛添加頂層API在0.12.2版本定義不JSX路線:

Router.createRoute() 
Router.createDefaultRoute() 
Router.createNotFoundRoute() 
Router.createRedirect() 

Route.js源的文檔註釋和詳細commit note可能是在您等待官方文檔和示例出現時查看的最佳位置。