2014-10-05 93 views
1

我正在關注「SailsCasts」,我想知道如何根據我正在瀏覽的鏈接,在導航欄中從「active」類中設置.ejs模板。如何將「活動」類添加到導航欄?

我不想使用頁面的「標題」以及想象中的很弱。我也不想在客戶端使用JavaScript。我希望導航欄Bootstrap中的「活動」類直接寫在服務器端,具體取決於我訪問的頁面。

要通過路由傳遞的參數?

回答

7

根據當前的控制器和操作,您可以在EJS文件中設置HTML元素的類。該信息存儲在所有視圖中公開的名爲req.options的變量中。

您可以訪問使用它的方式如下:

/views/navigation.ejs

<ul> 
    <li class="<%- (req.options.controller === 'someController' && req.options.action === 'someAction') ? 'active' : ''%>">User list</li> 
</ul> 

如果你要多次使用這種方法,你應該建立一個全球服務:

/api/services/Helper.js

module.exports = { 
    isCurrentPage: function(req, controller, action) { 
    return (req.options.controller === controller && req.options.action === action) 
    } 
} 

然後,在你的EJS觀點:

/views/navigation.ejs

<ul> 
    <li class="<%= Helper.isCurrentPage(req, 'users', 'list') ? 'active' : ''%>">User list</li> 
</ul> 

希望有所幫助。

+0

感謝您的回覆。但它不起作用。我有一個控制器UserController.js和我寫===用戶,但我有一個錯誤:'用戶沒有定義]'。如果我寫'用戶',那麼我沒有錯誤,但沒有出現。如果我放置或放棄'&&動作等......'也是一樣。怎麼修? – ginolon 2014-10-06 20:15:36

+0

比較運算符右側的變量必須是字符串。例如 <%=(req.options.controller ==='user')? 'active':''%> – abeja 2014-10-07 00:53:53

+0

對不起,@abeja,但Helper.js不起作用。它說錯誤:req沒有定義]。如何? – ginolon 2014-10-07 16:06:03