Jade - 模板引擎:如何检查变量是不是存在

Posted

技术标签:

【中文标题】Jade - 模板引擎:如何检查变量是不是存在【英文标题】:Jade - Template Engine: How to check if a variable existsJade - 模板引擎:如何检查变量是否存在 【发布时间】:2011-07-01 13:08:17 【问题描述】:

我目前正在一个新项目中使用 Jade。我想渲染一个页面并检查某个变量是否可用。

app.js:

app.get('/register', function(req, res)
    res.render('register', 
        locals: 
          title: 'Register',
          text: 'Register as a user.',
        
      );
);

register.jade:

- if (username)
p= username
- else
p No Username!

我总是收到以下错误:

username is not defined

关于如何解决此问题的任何想法?

【问题讨论】:

似乎到现在(2014 年),我们不再收到此错误。更容易使用。 【参考方案1】:

这应该有效:

- if (typeof(username) !== 'undefined')
  //-do something
-

【讨论】:

- if (isset(username))' isset 没有定义 抱歉,我对 phpjavascript 感到困惑。更新了我的答案。 坦克很多!此代码有效: - if (typeof username !== "undefined")【参考方案2】:

如果您不介意测试虚假值而不是未定义值,则比 @Chetan 的方法更简单:

if locals.username
  p= username
else
  p No Username!

之所以有效,是因为有点讽刺意味的是 locals 是模板的根对象。

【讨论】:

这给了我一个编译器错误:“builtin_function_or_method”对象没有属性“用户名” @yourfriendzak - 您确定您的错误是由模板的这一部分引起的吗? 完美运行,比使用内联 javascript 更好,谢谢。 我喜欢这个答案,因为这表明 Jade 是对空格敏感的语言。 小心,这只有在render阶段在控制器中定义变量时才有效:res.render('view', username: user.name);【参考方案3】:
if 'username' in this
    p=username

这是因为 res.locals 是模板中的根对象。

【讨论】:

【参考方案4】:

如果您事先知道您想要一个可用的特定变量,但并不总是使用,我已经开始向助手对象添加一个“默认”值。

app.helpers( username: false );

这样,您仍然可以在没有灾难性故障的情况下执行if (username) 。 :)

【讨论】:

谢谢,不过对于 express 3.x 仅供参考,现在是 app.locals( username: false ); 不错的方法。请注意,在 Express 4.x 中,app.locals 不再是一个函数,所以它应该是 app.locals.username = false;【参考方案5】:

哈巴狗更简单,玉的继任者

if msg
  p= msg

【讨论】:

【参考方案6】:

'username' 不应该包含在 locals 对象中吗?

https://github.com/visionmedia/jade/tree/master/examples

【讨论】:

是的,但如果事先与if 核对过,它仍然不应该返回undefined【参考方案7】:

创建了一个中间件,让 isDefined 方法在我的视图中随处可用:

module.exports = (req, res, next) => 
  res.locals.isDefined = (variable) => 
    return typeof(variable) !== 'undefined'
  ;  
  next();
;

【讨论】:

以上是关于Jade - 模板引擎:如何检查变量是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查列表中是不是存在数字,应用引擎模板

玉模板引擎,如何使用layout.jade?

Jade模板引擎学习语法:代码变量循环过滤器及mixin

Jade模板

在 Jade(目前称为“Pug”)模板引擎中循环

模板引擎之-jade