Подтвердить что ты не робот

Handlebars не возвращает логические переменные, если false

У Handlebars.js есть странное поведение. Он отображает логическое значение со значением true, как строка "true", но значение false как "".

var booleanTestTrue = true;
var booleanTestFalse = false;

Шаблон:

True: {{booleanTestTrue}}
False: {{booleanTestFalse}}

Относится к:

True: true
False: (empty string)

Есть ли способ исправить эту проблему? Или мне нужно написать помощника?

4b9b3361

Ответ 1

Вы можете использовать простой вспомогательный блок и реализовать #if, как показано ниже:

{{#if isTrue}}
       true
{{else}}
       false
{{/if}}

Ответ 2

Если вы хотите напечатать строку, вы должны передать строку.

false.toString();

В противном случае вам понадобится помощник (если вы не используете помощники #if | #unless для вывода строки).

На стороне примечания, если вы хотите напечатать эти значения для цели отладки, используйте {{log booleanTestFalse}}.

Ответ 3

Я был удивлен этим, и в итоге написал для него простой помощник:

Handlebars.registerHelper( 'toString', function returnToString( x ){
    return ( x === void 0 ) ? 'undefined' : x.toString();
} );

Затем вы вызываете его следующим образом:

True:  {{toString booleanTestTrue}}
False: {{toString booleanTestFalse}}

В большинстве сценариев вы можете просто пропустить return x.toString(). Дополнительная проверка позволяет избежать вызова toString на значения undefined.

Ответ 4

Я использовал это, как и ответ Барни, но также поддерживает значение null.

Handlebars.registerHelper('toString', function (v) { 
    return '' + v; 
});

Затем вы вызываете его следующим образом:

True:  {{toString booleanTestTrue}}
False: {{toString booleanTestFalse}}

Однако, если v - это объект с симпатичным toString методом, вам нужно сделать больше кода.