在Jade视图中使用javascript代码- if(变量)显示未定义而不是传递



这是一个反复出现的问题,我还没有找到关于So的另一个例子所以这里是:

当渲染翡翠模板时,即使在模板中使用-if(variableName),我也会得到'variableName' undefined

示例(我使用它作为'info' flash消息的部分):

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

这将返回'info'未定义,而不是在没有flash/info消息时不渲染任何内容。有人知道我哪里做错了吗?

我知道提到的typeof(variable) != 'undefined选项。如果我想做像-if (typeof(req.session.user) != 'undefined')这样的事情,我必须做3嵌套的' If (typeof(req) != 'undefined'。这是我唯一的选择吗?

try 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
    }
}

是的,大多数模板引擎将整个编译后的模板函数包装在with语句中。通过在解析模板时将变量考虑在内也可以做到其他的事情,但是我认为几乎所有的模板引擎都使用with()。

一个解决方案是在呈现模板时始终确保"info"在 locals对象中始终是。您可以通过显式地将info设置为undefined或任何其他假值来实现这一点。
var locals = { info: undefined, ... };

直接指定变量值如果变量未定义:

input(name="company[name]" type="text",placeholder="Name",value="#{company.name || ''}")

代替:

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
  -})
-}

因为"namespace"总是存在的,所以你可以引用Object。没有"undefined"错误的键,这将更好地为您工作。

相关内容

  • 没有找到相关文章

最新更新