在Jade视图中使用JavaScript代码 – 如果(variables)显示未定义,而不是传递

所以这是一个反复出现的问题,我还没有find另一个例子,所以在这里:

在渲染Jade模板时,即使在模板中使用-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')这是我唯一的select吗?

       

网上收集的解决方案 "在Jade视图中使用JavaScript代码 – 如果(variables)显示未定义,而不是传递"

尝试if(typeof info !== "undefined")

我不太确定,但我认为他们用来将variables注入到视图的范围中。

 with({}) { if (foo) { console.log("foo"); // fails foo is not defined. } } with({}) { if (typeof foo !== "undefined") { console.log("foo"); // no error } } 

是的,大多数模板引擎都将整个编译模板函数封装在with语句中。 通过在分析模板时考虑这些variables是可能的,但是我认为几乎所有的模板引擎都使用()。

一种解决方法是始终确保在呈现该模板时“info”始终位于 locals对象中。 你可以通过明确地设置信息到undefined或其他任何falsey值来做到这一点。

 var locals = { info: undefined, ... }; 

只需指定variables值IFvariablesundefined:

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

由于“名称空间”将始终存在,并且您可以引用Object.key而不会出现“未定义”错误,所以这对您会更好。

-Jeff