jQuery tmpl {{if}}条件,false不起作用

时间:2011-07-26 03:30:06

标签: jquery json knockout.js jquery-templates

我在模板的一部分中使用它:

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

除非IsDefault为假,否则无效。我甚至尝试过:

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

我已经验证了我的json对象中传递给模板的值实际上是false。

我也试过这个有效,但非常难看,我更喜欢它应该如何工作:

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

此外,如果我更改它以检查真实情况(没有意义,但只是为了调试目的而尝试)...

{{if IsDefault}}

......它运作正常。看起来它只是有错误值的问题。我通过jQuery ajax调用获取json并使用jquery tmpl的knockout映射。我没有js错误。

有关为何false!false进行测试无效的任何想法?

2 个答案:

答案 0 :(得分:4)

尝试使用{{if !(IsDefault())}}

如果您正在使用不在表达式中的observable,那么jQuery模板会看到它是一个函数并将其作为函数调用以获取可观察值。如果它在一个表达式中,那么这不会发生,你需要将你的observable作为一个函数调用(没有args)来获取它的值。

答案 1 :(得分:1)

对于像这样的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不存在,您将看到 未捕获的ReferenceError:未定义IsDefault

我不知道如何解决这个问题,但与此同时,这对我有用:

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