3

Expressで大まかな店頭アプリを作成しようとしていますが、ユーザーがログインしていてユーザー名が「未定義」ではない場合、1つのブロックが表示され、ログアウトしている場合はそれを設定しようとしています別のものを示します。

これが私のlayout.jadeファイルです:

doctype 5
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
      h1.main= title
        body
          - if (typeof(username) !== 'undefined') {
            block items
          -}
          - else {
            block content
          -}

マイ コンテンツ ブロックのコンテンツ。

extends layout

block content

  #content
    img#splash(src='images/ninja.png')

そして私のアイテムはブロックします。

block items

     #items
       h1 Hello (username)

ログインすると、items.jade ファイルの内容ではなく、ページのタイトル (layout.jade ファイルの内容) だけが表示されます。

これがなぜなのか誰か知っていますか?私はExpressを初めて使用していて、うまくいきません:/

私が何かをするなら。

- if (typeof(username) !== 'undefined') {
        p test
      -}
      - else {
        block content
      -}

その後、ログインするとテキストが表示されます。

4

2 に答える 2

3

underscore.Jsを使用するhtml をより適切に管理して Jade にマップするには、

ファイル構成エクスプレスまたは接続で

    app.use(function(req, res, next){
       res.locals._ = require('underscore');
       next();
    });

index.jade で

    doctype 5
    html
      head
        title= title
        link(rel='stylesheet', href='/stylesheets/style.css')
          h1.main= title
            body
              if _.isUndefined( username )
              //- if _.isString( username ) or bla...
                block items
              else
                block content

それははるかに優れており、面白いことができます!

于 2013-03-25T03:27:34.523 に答える
3

あなたのコードは正しいですがusername、翡翠ファイルをレンダリングするときに合格していますか? jade は、リクエストに応じてエクスプレス サーバーによってレンダリングされます。それ以外の場合は、レンダリング時にコードが実行されます。

ページが表示された後にログイン (ユーザー名を設定) またはログアウトすると、ブロックは表示/更新されません。アプリでは、レンダリング中にユーザー名を渡すことができます

res.render('layout', {locals:{title: 'Page title', username: "something"}});
//display block content
res.render('layout', {locals:{title: 'Page title'}});
//display block items
于 2013-03-24T05:30:53.333 に答える