2011-12-19 6 views
6
- if (typeof(person) == 'undefined') 
    input(type="text", name="person[Name]") 
    - else 
    input(type="text", name="person[Name]", value="#{person.Name}") 

Есть ли способ написать этот inline? У меня есть опция select, и я не хочу делать условный оператор для 30 + значений, чтобы выбрать правильный вариант.Внутреннее состояние в Джейде

Спасибо!

ответ

4

условный оператор должен сделать

input(type='text', name='person[Name]', value= (person?(person.name?person.name:''):'')) 

однако, по дизайну мы всегда можем пропускать человек? таким образом, сравнение не требуется. Код будет что-то вроде

input(type='text', name='person[Name]', value= person.name) 
+0

Это, конечно, блестящий. Передача пустого объекта для предотвращения «неопределенных» ошибок, отсутствие необходимости в смешении или условных условиях. Я использовал JavaScript для выбора опции в списке, поскольку условный оператор не работал. – Patrick

-1

Когда значение равно undefined или null, атрибут не будет показан. Это должно работать:

input(type='text', name='person[Name]', value= person && typeof(person)) 
+0

К сожалению, Jade показывает 500 ReferenceError, если человек не определен. Если человек определен, он говорит «строка» вместо значения в поле ввода. Так что это не сработает. – Patrick

6

Вы можете использовать Примеси

mixin safeInput(person, property) 
    - if (typeof(person) == 'undefined') 
    input(type="text", name="person[#{property}]") 
    - else 
    input(type="text", name="person[#{property}]", value="#{person[property]}") 

Тогда

mixin safeInput(person, 'Name') 
mixin safeInput(person, 'Email') 
... 
+0

Хм, неплохо. Я должен посмотреть, работает ли это для выбора опции. Благодаря! – Patrick