2012-05-22 44 views
4

我在一个非常简单的快速应用程序中收到了一个非常愚蠢的错误。我使用玉石作为视图引擎,我只是为了防止它与问题有关而这样说。Express&jade(node.js) - 当检查是否存在变量时未定义错误

我想检查一个变量是否定义为了渲染一个或另一个,但只是检查该变量触发“变量未定义”错误。这不是我期望的行为,所以我想知道如果我做错了什么。这是我正在使用的查看代码:

h1= title 
- if (user) 
    p Welcome to #{title}, #{user.username} 
- else 
    p Welcome to #{title} 

什么是正确的方法来做到这一点?必须有一种方法来检查视图上的变量。 : -/

编辑:忘了说错误在哪一行被触发,它在第二行触发“ - if(user)”。

回答

13

作为另一个answer玉文档的Public API部分提到说,locals变量数据是如何传递到一个Jade模板。在百灵之前,我用locals预先将我的变量放在玉石模板中。这正确地绕过了错误。

所以下面的玉模板应解决您的错误:

h1= title 
- if (locals.user) 
    p Welcome to #{title}, #{user.username} 
- else 
    p Welcome to #{title} 
3

你没有附上 p Welcome to #{title}; #{user.username}引号

尝试

if(typeof obj != 'undefined') 
+0

这是行不通的,谢谢!我仍然认为简单的检查应该可以工作,但它更清洁:-(。 – uorbe001

1

layout.jade

# the following function is a safe getter/setter for locals 
- function pagevar(key, value) { var undef; return (value===undef) ? locals[key] || null : locals[key] = value; } 
block config 
    #intended as a non-rendered block so that locals can be overridden. 
    # put your defaults here... - use append in the child view 
!!! 
html 
    head 
    title=pagevar('title') 
    meta(name='description',content=pagevar('description')) 
...

page.jade

append config 
    - locals.title = 'override'; 
    - locals.description = 'override 2'; 
    - pagevars('somekey', 'some value'); 
...

易peazy。