2014-01-07 7 views
7

私はSailsJSを使ってWebアプリケーションを開発しています。別のフロントエンドと管理者のレイアウトを持つ他のアプリに似ています。SailsJSアプリ内で複数のレイアウトを使用するには?

私はデフォルトのビューエンジン 'ejs'を使用しています。 フロントエンドと管理サイトに別々のレイアウトを使用する方法を教えてください。 アクションごとに特定のレイアウトを使用できますか?

多くのおかげで、Sails.js Documentationから

・アイングエン

答えて

3

少なくともEJSで、代わりに地元のレイアウトを使用してカスタムレイアウトを示すのは、使用しなければなりません_layoutFile:

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

使用したいレイアウトへのパスは、レンダリングしているビューを基準にして指定する必要があります。あなたがUserControllerでのcreateアクションにいるのであれば、カスタムレイアウトにビュー(ビュー/ユーザー/ create.ejs)、相対パスを描画するには、次のようになります。../staticSiteLayout.ejs

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

UPDATE:

ドキュメントは少しオフコードからあるように移動するための方法は以下の通りである現在の(v0.9.8)バージョンので、ようだ:

あなたは、このような別のレイアウトを設定することができ帆0.10で
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

あなたのコントローラで:

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

詳細な説明here

0

あなたの質問をスパムして申し訳ありませんが、私のアプリには同様のソリューションが必要です。 routes.jsでレイアウトを定義することは素晴らしいことでしょう。たとえば/ admin/*は1つのレイアウトを使用します。/pidはコントローラの中に潜んでいるので、静的なレイアウトパスでオーバースピードします。私はこの概念を試してみましたが、私はまた、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 }); 

レイアウト:

ヌル=なし

'フォルダ/レイアウト' =あなたのレイアウト

帆のv0.12で
+0

その機能していません – shuboy2014

2

、あなたがレイアウトを設定する必要がある場合新しいフォルダ(例えば、「レイアウト」)を作成し、レイアウトファイルをプッシュすることができます。

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

は、あなたも行うことができます。

res.locals.layout = "layout/my_file_layout"; 
res.view('auth/login'); 
関連する問題