2014-01-07 81 views
7

我正在使用SailsJS開發一個Web應用程序。我的應用程序與其他擁有單獨的前端和管理佈局的應用程序類似。如何在SailsJS應用程序中使用多個佈局?

我使用默認視圖引擎'ejs'。 你可以請我幫助我如何使用單獨的佈局前端和管理網站? 我可以爲每個動作使用特定的佈局嗎?

非常感謝,

映阮

回答

3

Sails.js Documentation

至少在EJS,而不是表明與佈局本地您的自定義佈局,您必須使用_layoutFile:

res.view({ 
    _layoutFile: 'relativePathToYourCustomLayoutFromTheTargetView.ejs' 
}); 

您想要使用的佈局路徑應該相對於您渲染的視圖指定。所以,如果你在UserController中的創建動作的時候,呈現視圖(視圖/用戶/ create.ejs),相對路徑至您的自定義佈局可能是:../staticSiteLayout.ejs

PROJECT FOLDER 
└── views 
    ├── staticSiteLayout.ejs 
    ├── layout.ejs 
    └── user 
     └── create.ejs 

UPDATE:

好像文檔有點過來自碼,所以對於當前(v0.9.8)版本的路要走如下:

module.exports = { 
    index: function(req, res){ 
    res.view({ layout: 'layoutadmin' }); 
    } 
} 
+0

我嘗試這一點,但好像它不工作。這是我的代碼:'module.exports = { \t指數:功能(REQ,RES){ \t \t res.view({ \t \t _layoutFile:」 ../layoutadmin.ejs' \t \t}); \t} }' – anhnt

+0

你有什麼錯誤? – bredikhin

+0

它總是呈現我在config/views.js中定義的默認佈局 – anhnt

3

在帆0.10,您可以設置不同的佈局像這樣在你的控制器中:

// override the layout to use another 
    res.locals.layout = 'layouts/layout2'; 
    return res.view('test'); 

詳細解釋here

0

對不起,您的問題發送垃圾郵件,但我需要一個類似的解決方案爲我的應用程序。在routes.js中定義佈局會很棒,例如/ admin/*會使用一個佈局,例如。/app/*會使用其他的,等等。因爲它是一個皮塔,可以潛入控制器,並用靜態佈局路徑對它們進行過濾。我想這個概念,但它似乎是唯一的工作,如果我也在routes.js定義控制器配置文件,例如:

module.exports.routes = { 

    '/admin/*' : { 
     controller: 'AdminController', 
     action: 'index', 
     locals: { 
     layout: 'admin/layout' 
     } 
    } 
}; 

這並不工作,但對於路由管理所有行動統一到同一個控制器,這當然是錯誤的。如果我省略了控制器的一部分,這一概念總是使用默認視圖/ layout.ejs和地方沒有設置:

module.exports.routes = { 

    '/admin/*' : { 
     locals: { 
     layout: 'admin/layout' 
     } 
    } 
}; 

這並不工作,但它是理想得到它的方式。

0

如果您需要在控制器中設置視圖和佈局(Sails v0。11):

res.view('auth/login', { layout: null }); 

佈局:

空=無

'文件夾/佈局'=佈局

+0

其不起作用 – shuboy2014

2

在帆v0.12,如果你需要設置佈局你的控制器,你可能會創建一個新文件夾(例如「佈局」)並推送佈局文件。

res.view('auth/login', {layout: layout/my_file_layout} 

你也可以這樣做:

res.locals.layout = "layout/my_file_layout"; 
res.view('auth/login'); 
相關問題