0

Expressjs でアプリの簡単なメニューを作成しようとしています。クラス「アクティブ」を、現在アクセスしているページのメニューリスト項目に設定したい... Express.js に次のコードを含む Jade ビューファイルがあります。

li(class = path === "/id/admin" ? "active" : "")
  a(href='/id/admin', title='admin') Admin
li(class = path === "/id/admin/services" ? "active" : "")
  a(href='/id/admin/services', title='services') Services
li(class = path === "/id/admin/staff" ? "active" : "")
  a(href='/id/admin/staff', title='staff') Staff

スラッグの「id」部分は、ログインしているクライアントに応じて動的であると想定されているため、これは機能しません。また、別の問題は、「/id/admin/staff」などのスラッグの一部が「/id/admin/staff/new」または「/id/admin/staff/staff-id/edit」のように、最後に余分なスラッグを含めます。

スラッグの特定の部分に一致させるには、ある種の正規表現が必要だと考えています。同様に: スラッグに「/services」というフレーズがどこかに含まれている場合は、メニューでそのリスト項目をアクティブにします。しかし、これをどのように書き、ジェイドの見解に組み込むかはわかりません。

あなたは私を助けることができます?

4

1 に答える 1

0

パスの一部を確認するために単純な正規表現を実行したいだけの場合、かなり基本的なものは次のようになります

li(class = path.match(/^\/id\/admin$/) ? "active" : "") //string has to end with "admin"
  a(href='/id/admin', title='admin') Admin
li(class = path.match(/^\id\/admin\/services/) ? "active" : "")
  a(href='/id/admin/services', title='services') Services
li(class = path.match(/^\/id\/admin\/staff/) ? "active" : "")
  a(href='/id/admin/staff', title='staff') Staff

これは admin と完全に一致し、他の 2 つはパス文字列の先頭でこれらのパターンを検索するだけです。

これは、Express から Jade テンプレートにパスを渡してレンダリングすることも前提としています。

于 2013-09-09T09:45:32.997 に答える