6

したがって、これは私が繰り返し発生する問題であり、SOで別の例を見つけていないため、次のようになります。

Jade テンプレートをレンダリングすると、テンプレートで'variableName' undefined使用-if(variableName)する場合でも取得されます。

例 (これを「情報」フラッシュ メッセージの一部として使用しています):

-if(info)
  - if(info.length){
   ul
   -info.forEach(function(info){
     li= info
  -})
-}

これは、flash/info メッセージがない場合に何もレンダリングしないのではなく、'info' is not defined を返します。私が間違っていることを誰かが知っていますか?

typeof(variable) != 'undefined前述のオプションを認識しています。私が何かをしたい場合は、-if (typeof(req.session.user) != 'undefined')ネストされた `if (typeof(req) != 'undefined'' を 3 つ実行する必要があります。これが私の唯一のオプションですか?

4

4 に答える 4

10

試してみてくださいif(typeof info !== "undefined")

よくわかりませんがwith、ビューのスコープに変数を挿入するために使用していると思います。

with({}) {
    if (foo) {
         console.log("foo"); // fails foo is not defined.
    }
}

with({}) {
    if (typeof foo !== "undefined") {
         console.log("foo"); // no error
    }
}
于 2011-04-21T18:20:41.767 に答える
1

はい、ほとんどのテンプレートエンジンは、コンパイルされたテンプレート関数全体をwithステートメントでラップします。テンプレートを解析するときに変数を考慮に入れることで別の方法を実行することは可能ですが、ほとんどすべてのテンプレートエンジンがwith()を使用していると思います。

1つの解決策は、そのテンプレートをレンダリングするときに、「info」が常にlocalsオブジェクトにあることを常に確認することです。これを行うには、infoをundefinedまたはその他の誤った値に明示的に設定します。

var locals = { info: undefined, ... };
于 2011-04-21T21:51:32.690 に答える
-1

それ以外の:

var params = {
    "info": [
        "a value"
    ]
};

-if(info)
  - if(info.length){
   ul
   -info.forEach(function(info){
     li= info
  -})
-}

使用する:

var params = {
    "namespace": {
        "info": [
            "a value"
        ]
    }
};


-if(namespace.info)
  - if(namespace.info.length){
   ul
   -namespace.info.forEach(function(info){
     li= info
  -})
-}

「名前空間」は常に存在し、「未定義」エラーなしで Object.key を参照できるため、これはうまく機能します。

-ジェフ

于 2012-04-04T19:32:52.730 に答える