有没有办法if / else玉块?

时间:2013-03-24 02:08:02

标签: node.js express pug

我正在尝试在Express中创建一个原始商店前端应用程序,我试图设置它,以便如果一个人登录,因此用户名不是“未定义”,它显示一个块,如果你是退出它显示另一个。

这是我的layout.jade文件:

doctype 5
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
      h1.main= title
        body
          - if (typeof(username) !== 'undefined') {
            block items
          -}
          - else {
            block content
          -}

我的内容阻止内容。

extends layout

block content

  #content
    img#splash(src='images/ninja.png')

我的物品挡住了。

block items

     #items
       h1 Hello (username)

当我登录时,我只看到页面标题(我的layout.jade文件内容)而不是items.jade文件的内容。

有谁知道这是为什么?我是Express的新手,无法解决这个问题:/

如果我做的话。

- if (typeof(username) !== 'undefined') {
        p test
      -}
      - else {
        block content
      -}

然后我可以在登录时看到该文字。

2 个答案:

答案 0 :(得分:3)

您的代码是正确的,但在渲染jade文件时是否传递了username。 jade由您的快速服务器呈现以返回请求,如果在呈现发生时执行其他代码。

如果您在显示页面后登录(设置用户名)或注销,则不会显示/更新该块。在您的应用中,您可以在呈现时传递用户名

res.render('layout', {locals:{title: 'Page title', username: "something"}});
//display block content
res.render('layout', {locals:{title: 'Page title'}});
//display block items

答案 1 :(得分:3)

使用underscore.Js为了更好地管理和映射html到Jade,最好是函数

在文件config express或connect

    app.use(function(req, res, next){
       res.locals._ = require('underscore');
       next();
    });

在index.jade

    doctype 5
    html
      head
        title= title
        link(rel='stylesheet', href='/stylesheets/style.css')
          h1.main= title
            body
              if _.isUndefined( username )
              //- if _.isString( username ) or bla...
                block items
              else
                block content

它好多了,你可以做有趣的事情!