【问题标题】:jQuery tmpl {{if}} condition with false not working带有假的jQuery tmpl {{if}}条件不起作用
【发布时间】:2011-10-13 02:05:56
【问题描述】:

我在我的模板中使用了这个:

{{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 的敲除映射。我没有收到任何 js 错误。

关于为什么对 false!false 的测试不起作用的任何想法?

【问题讨论】:

  • 也尝试过 {{if IsDefault === true}} 出人意料地不起作用,但 {{if IsDefault}} 确实...
  • 你的 JSON 对象是什么样的?

标签: jquery json knockout.js jquery-templates


【解决方案1】:

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

如果您使用的 observable 不在表达式中,那么 jQuery 模板会将其视为一个函数并将其作为函数调用以获取 observable 的值。如果它在表达式中,则不会发生这种情况,您需要将 observable 作为函数(不带 args)调用以获取其值。

【讨论】:

    【解决方案2】:

    对于这样的 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 is not defined

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2017-03-21
      • 2017-10-28
      相关资源
      最近更新 更多