Условие jQuery tmpl {{if}} с false не работает - PullRequest
2 голосов
/ 26 июля 2011

Я использую это в части моего шаблона:

{{if !IsDefault}}
    <a href="#" onclick="makeDefault('${Id}');return false;">Make Default</a>
{{/if}}

За исключением случаев, когда IsDefault равно false, оно не работает. Я даже попробовал:

{{if IsDefault === false}}` and `{{if IsDefault == false}}

Я проверил, что значение фактически является ложным в моем объекте json, который передается в шаблон.

Я также попробовал это, которое работает, но довольно уродливо, и я бы предпочел, чтобы оно работало так, как должно:

{{if IsDefault}}
{{else}}
    <a href="#" onclick="makeDefault('${Id}');return false;">Make Default</a>
{{/if}}

Кроме того, если я изменю его для проверки истинного состояния (не имеет смысла, а просто попробовал его в целях отладки) ...

{{if IsDefault}}

... работает нормально. Похоже, у него просто есть проблемы с ложными значениями. Я получаю JSON с помощью jQuery AJAX-вызова и использую отображение нокаута с JQuery TMPL. Я не получаю ошибок JS.

Есть идеи, почему не работает тестирование на false или !false?

Ответы [ 2 ]

4 голосов
/ 26 июля 2011

Попробуйте использовать {{if !(IsDefault())}}

Если вы используете наблюдаемую информацию, отсутствующую в выражении, то шаблоны jQuery видят, что это функция, и вызывают ее как функцию, чтобы получить значение наблюдаемой. Если оно находится в выражении, то этого не происходит, и вам нужно вызвать свою наблюдаемую функцию как функцию (без аргументов), чтобы получить ее значение.

1 голос
/ 25 мая 2017

Для шаблона Jquery, подобного этому:

{{if !IsDefault}}
    html_code
{{/if}}

Код интерпретируется так:

if ((typeof(!IsDefault) !== 'undefined' && (!IsDefault) != null) && (typeof(!IsDefault) === 'function' ? (!IsDefault).call($item) : (!IsDefault))) 
{
    __.push(html_code);
}

и из-за этого typeof(!IsDefault), а переменная IsDefault не существует, вы увидите Uncaught ReferenceError: IsDefault не определено

Я не знаю, как это решить, но пока что это работает для меня:

{{if IsDefault}}
{{else}}
    html_code
{{/if}}
...