【问题标题】:Express & jade (node.js) - variable is not defined error when checking for existenceExpress&jade(node.js)-检查是否存在时未定义变量错误
【发布时间】:2012-05-22 20:16:15
【问题描述】:

我在一个非常简单的快递应用上遇到了一个非常愚蠢的错误。我使用jade作为视图引擎,我这样说是为了以防它与问题有关。

我正在尝试检查是否定义了变量以呈现一件事或另一件事,但简单地检查该变量会触发“变量未定义”错误。这不是我所期望的行为,所以我想知道我是否做错了什么。这是我正在使用的视图代码:

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

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

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

【问题讨论】:

    标签: javascript node.js view pug


    【解决方案1】:

    正如另一个answer 中提到的,Jade 文档的Public API 部分说locals 变量是数据传递给Jade 模板的方式。在云雀中,我在翡翠模板中添加了我的变量locals。这正确地绕过了错误。

    所以下面的 Jade 模板应该可以解决您的错误:

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

    【讨论】:

      【解决方案2】:

      您没有将p Welcome to #{title}; #{user.username} 括在引号中

      试试

      if(typeof obj != 'undefined')
      

      【讨论】:

      • 这确实有效,谢谢!。我仍然认为简单的检查应该有效,它更干净:-(。
      【解决方案3】:

      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');
      ...

      轻松愉快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-09
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        • 1970-01-01
        • 2015-11-23
        • 1970-01-01
        相关资源
        最近更新 更多