當建置具有許多不同頁面的應用程式時,將多個 HTML 檔案共用的標記外推到版面配置會很有幫助。 這種做法減少專案中的程式碼總量,並協助您避免在日後於多個檔案中進行相同的變更。
在 Sails 和 Express 中,版面配置是由檢視引擎本身實作的。 例如,jade
有其自己的版面配置系統,以及其自己的語法。
為了方便起見,當使用預設檢視引擎 EJS 時,Sails 捆綁了對版面配置的特殊支援。 如果您想要將版面配置與不同的檢視引擎搭配使用,請查看該檢視引擎的文件,以尋找適當的語法。
Sails 版面配置是您應用程式 views/
資料夾中的特殊 .ejs
檔案,您可以使用它們來「包裝」或「夾住」其他檢視。 版面配置通常包含前言(例如 <!DOCTYPE html><html><head>....</head><body>
)和結論(</body></html>
)。 原始檢視檔案是使用 <%- body %>
包含的。 版面配置永遠不會在沒有檢視的情況下使用:那就像是端給某人一份麵包三明治。
您的應用程式的版面配置支援可以在 config/views.js
中設定或停用,並且可以透過設定名為 layout
的特殊本地變數來覆寫特定路由或動作的版面配置。 依預設,Sails 將使用位於 views/layouts/layout.ejs
的版面配置來編譯所有檢視。
若要指定檢視使用的版面配置,請參閱以下範例。 在 路由 的文件中,有更多資訊。
以下範例路由將使用位於 ./views/users/privacy.ejs
中的檢視,並置於位於 ./views/users.ejs
的版面配置中
'get /privacy': {
view: 'users/privacy',
locals: {
layout: 'users'
}
},
以下範例控制器動作將使用位於 ./views/users/privacy.ejs
中的檢視,並置於位於 ./views/users.ejs
的版面配置中
privacy: function (req, res) {
res.view('users/privacy', {layout: 'users'})
}
為什麼版面配置僅適用於 EJS?
幾年前,Express 中已棄用對版面配置/局部範本的內建支援。 相反地,開發人員應仰賴檢視引擎本身來實作此功能。(請參閱 https://github.com/balderdashy/sails/issues/494 以取得更多資訊。)
Sails 支援舊版
layouts
功能,以方便使用、與 Express 2.x 和 Sails 0.8.x 應用程式的回溯相容性,尤其是為了讓來自其他 MVC 框架的新社群成員感到熟悉。 因此,版面配置僅使用預設檢視引擎 (ejs) 進行過測試。如果版面配置不是您喜歡的方式,或者(目前)如果您使用的伺服器端檢視引擎不是 ejs,(例如 Jade、handlebars、haml、dust),您會希望在
sails.config.views
中設定layout:false
,並仰賴您的檢視引擎的自訂版面配置/局部範本支援。