Неопределенный атрибут в движке шаблонов Jade - PullRequest
3 голосов
/ 25 февраля 2012

Я просто пытаюсь отобразить значение в поле ввода с помощью Jade (0.20.3) и Express (2.5.8):

input(name='username', type='text', id="username", value=username)

Это довольно просто, но выдает ошибкукогда значение не определено:

username is not defined

Однако в документации указывается:

When a value is undefined or null the attribute is not added, so this is fine, it will not compile 'something="null"'.

Есть ли что-то, что я бы сделал неправильно?

Ответы [ 2 ]

6 голосов
/ 10 мая 2012

Краткий ответ: используйте locals.someVar, если вы не уверены, что someVar существует.

Более длинный ответ:

Я думаю, что первоначальный ответ Брэндона и последний комментарий верны (хотя синтаксис #{...} не нужен), но для уточнения: есть разница между передачей переменной (технически, свойства объекта) с значение undefined, и вообще не передавать эту переменную.

Поскольку Jade преобразует ваш шаблон в исходный код JS и eval s (в контексте блока with), вы должны убедиться, что вы не ссылаетесь на переменные, которые не были переданы в или они будут. Это сообщение в блоге имеет некоторую информацию о неопределенных и необъявленных переменных и ReferenceError.

Ваш шаблон Jade должен работать правильно, если вы выполните одно из следующих действий:

// ok, even if req.session.username is not defined
res.render('index', { username: req.session.username })

// ditto
res.local('username', req.session.username);
res.render('index')

Но это не сработает:

res.locals(req.session) //if no username property exists
res.render('index', { /* no username */ } )

Если нецелесообразно вручную передавать каждый параметр, на который вы можете ссылаться, вы можете ссылаться на переменную в своем шаблоне как на свойства объекта locals (например, locals.username)

1 голос
/ 26 февраля 2012

Вы должны убедиться, что вы передаете имя пользователя в шаблон Jade.Пример:

app.get('/', function (req, res) {
    res.render('index', { title:'APP NAME', username: req.session.username });
});

Кроме того, вы бы назвали это так в шаблоне Jade: #{username}

...