質問
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ソースとeval
sに変換しているため(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}
所属していません StackOverflow