【问题标题】:how to tell if a subproperty exists in jquery tmpl如何判断jquery tmpl中是否存在子属性
【发布时间】:2011-12-16 04:26:31
【问题描述】:

我也有类似的问题:see link

我需要确定给定的 SUBproperty 是否存在。我的 json 看起来像这样

{
    "nodeX": {
        "sub_node1": {
            "items": {
                "A": "something",
                "B": "etc"
            }
        },
        "sub_node2": {
            "items": {
                "A": "another thing",
                "B": "blablabla",
                "C": {
                    "top": 50,
                    "left": 75
                }
            }
        }
    }
}

如何进行 IF 语句查看 nodeX.sub_node2.items.C 是否存在?

如果我这样做,我会收到错误: {{if ${nodeX.sub_node2.items.C }} ... {{/if}}

【问题讨论】:

    标签: jquery json templates


    【解决方案1】:

    IF 语句是这样的:

    {{if typeof nodeX.sub_node2.items.C !== "undefined"}}
    

    【讨论】:

      【解决方案2】:

      当您尝试访问 Object 上不存在的属性时,undefined 会被返回,其中当然不会有任何属性。

      你需要构造这个复杂的检查...

      if (nodeX && nodeX.sub_node2 && nodeX.sub_node2.items && nodeX.sub_node2.items.C) {
      
      }
      

      【讨论】:

      • 亚历克斯,感谢您的回答。不幸的是它没有工作......至少作为jquery模板中的IF语句。我稍后会发布一个 jsfiddle 来玩
      【解决方案3】:

      jQuery 模板对顶级对象(您的数据上下文)使用 JavaScript with() 表示法,因此要对其进行测试,您必须使用

      typeof nodeX === 'undefined' ? valueIfUndefined : nodeX
      

      那么要检查子对象是否存在,应该可以做到

      ('sub_node1' in nodeX) ? 'yes!' : 'no!'
      

      如果您只是有条件地显示属性,您实际上可以跳过自己检查它们而直接执行

      ${items.A}${items.C}
      

      因为框架实际上是在填充模板时为您执行这些检查。如果属性不存在,则不会尝试执行语句。

      【讨论】:

        猜你喜欢
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 2021-07-26
        相关资源
        最近更新 更多