2012-05-22 70 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。