質問

JADE(0.20.3)とExpress(2.5.8)で入力フィールドに値を表示しようとしています(2.5.8):

input(name='username', type='text', id="username", value=username)
.

それは非常に単純ですが、値が未定義のときにエラーをスローします。

username is not defined
.

しかし、文書は次のことを示しています。

When a value is undefined or null the attribute is not added, so this is fine, it will not compile 'something="null"'.
.

私が間違ったことがあるだろうものはありますか?

役に立ちましたか?

解決

短回答:locals.someVarが存在することがわからない場合は、someVarを使用します。

答え:

ブランドンの最初の回答と最後のコメントは正しいと思います(#{...}の構文は必要ありませんが)、ビットを詳しく説明するのには、値を渡す(技術的には、オブジェクトプロパティ)の渡しの間に違いがあります。 undefinedの範囲で、その変数をまったく渡さない。

JADEはテンプレートをJSソースとevalsに変換しているため(withブロックのコンテキストで)、渡されていない変数を参照していないことを確認する必要があります。 beうこのブログの投稿には、未定義のいくつかの背景があります。 vs宣言されていない変数とReferenceError

あなたの翡翠テンプレートはこれらのもののうちの1つを実行した場合に正しく機能するべきです:

// ok, even if req.session.username is not defined
res.render('index', { username: req.session.username })

// ditto
res.local('username', req.session.username);
res.render('index')
.

しかしこれらはうまくいきません:

res.locals(req.session) //if no username property exists
res.render('index', { /* no username */ } )
.

各パラメータを手動で渡すことが実用的でない場合は、参照することができます.localsオブジェクト(E.locals.usernameのプロパティとしてテンプレート内の変数を参照できます。

他のヒント

あなたがJadeテンプレートにユーザー名を渡すことを確認する必要があります。例:

app.get('/', function (req, res) {
    res.render('index', { title:'APP NAME', username: req.session.username });
});
.

また、JADEテンプレートのようにそれを呼び出すことがあります:#{username}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top