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 没有定义 抱歉,我对 php 和 javascript 感到困惑。更新了我的答案。 坦克很多!此代码有效: - 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 - 模板引擎:如何检查变量是不是存在的主要内容,如果未能解决你的问题,请参考以下文章