Нефрит - механізм шаблонів: Як перевірити, чи існує змінна


80

Зараз я використовую Джейд для нового проекту. Я хочу зробити сторінку та перевірити, чи доступна певна змінна.

app.js:

app.get('/register', function(req, res){
    res.render('register', {
        locals: {
          title: 'Register',
          text: 'Register as a user.',
        }
      });
});

register.jade:

- if (username)
p= username
- else
p No Username!

Я завжди отримую таку помилку:

username is not defined

Будь-які ідеї щодо того, як я можу це виправити?


1
здається, що зараз (2014) ми більше не отримуємо цієї помилки. Набагато простіший у використанні.
безликий

Відповіді:


105

Це має спрацювати:

- if (typeof(username) !== 'undefined'){
  //-do something
-}

- якщо (isset (ім'я користувача)) '
isset

2
Вибачте, я переплутався з PHP та Javascript. Оновив свою відповідь.
Четан

7
Танків багато! Цей код працює: - if (typeof username! == "undefined")
mbecker

93

Простіше, ніж метод @ Chetan, якщо ви не проти перевірити помилкові значення замість невизначених значень:

if locals.username
  p= username
else
  p No Username!

Це працює, оскільки дещо іронічно названий localsє кореневим об’єктом для шаблону.


Це дає мені помилку компілятора: об'єкт 'builtin_function_or_method' не має атрибуту 'username'
zakdances

@yourfriendzak - Ви впевнені, що ваша помилка спричинена цією частиною вашого шаблону?
BMiner

1
Працює ідеально, і це краще, ніж використання вбудованого JavaScript, дякую.
Sergi Ramón

Мені подобається ця відповідь, оскільки це показує, що Джейд є чутливою до пробілів мовою.
Віктор Паливода

Обережно, це спрацює, лише якщо змінна була визначена в контролері на renderетапі:res.render('view', {username: user.name});
Августин Рідінгер,

10
if 'username' in this
    p=username

Це працює, оскільки res.locals є кореневим об’єктом у шаблоні.


6

Якщо ви заздалегідь знаєте, що хочете, щоб певна змінна була доступна, але не завжди використовується, я почав додавати значення "за замовчуванням" до допоміжного об'єкта.

app.helpers({ username: false });

Таким чином, ви все ще можете обійтися if (username) {без катастрофічної невдачі. :)


2
Дякую, хоча FYI для express 3.x це заразapp.locals({ username: false });
7zark7

6
Гарний підхід. Зверніть увагу, що в Express 4.x app.localsце вже не функція, тому вона повинна бутиapp.locals.username = false;
Том


0

Створив проміжне програмне забезпечення, щоб метод був isDefinedдоступний скрізь у моїх уявленнях:

module.exports = (req, res, next) => {
  res.locals.isDefined = (variable) => {
    return typeof(variable) !== 'undefined'
  };  
  next();
};
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.