2016-08-15 68 views
0

我正在尝试使用Jade作为HTML模板的简单Web应用程序。我有JSON,看起来像:检查JSON属性是否存在Jade模板

{ 
    "responses": [ 
     { 
      "fieldOne": 1, 
      "fieldTwo": 2, 
      "fieldThree": "Some string" 
     }, 
     { 
      "fieldOne": 10, 
      "field2": 20, 
      "fieldFour": "Some other string" 
     } 
    ] 
} 

我想循环遍历这个玉响应列表,并且在每个响应表创建一个行。循环似乎工作正常,问题是有些响应缺少字段,并且如果字段丢失,我想在该单元格中留出空白。我传入一个地图(来自Spark),只有一个条目“responseData”映射到整个JSON对象。

body 
    div 
     table 
      thead 
       tr 
        th Field One 
        th Field Two 
        th Field Three 
        th Field Four 
      tbody 
       each val in responseData.responses 
        tr 
         td 
          #{val.fieldOne} 
         td 
          #{val.fieldTwo} 
         td 
          #{val.fieldThree} 
         td 
          #{val.fieldFour} 

如果每个响应都具有全部四个字段,那么此时正常工作。我想用条件检查字段是否存在,然后尝试读取值来替换它们。喜欢的东西:

td 
    if val.fieldFour 
     #{val.fieldFour} 

这将返回“无法访问或不明财产fieldFour”如果fieldFour不存在。我想知道如何检查val是否具有特定属性。我尝试过下面的Jade教程,试着用locals来预先考虑事物,使用括号符号等,但无济于事。我没有找到一个例子,这是在一个循环内完成的,所以这可能是一个问题。

我已经看过所有其他的堆栈溢出问题,我可以,所以任何帮助表示赞赏!谢谢!

回答

0

我已经设法通过交换哈希值#获得感叹号!

两者的区别在于#被转义,而!是原始数据。你可以在这里看到的不同的工作实例 - http://naltatis.github.io/jade-syntax-docs/#escaping

玉:

- responseData = { "responses": [{"fieldOne": 1,"fieldTwo": 2,"fieldThree": "Some string"},{"fieldOne": 10,"field2": 20,"fieldFour": "Some other string"}]} 

table 
    thead 
    tr 
     th Field One 
     th Field Two 
     th Field Three 
     th Field Four 
    tbody 
    each val in responseData.responses 
     tr 
     td 
      if val.fieldOne 
      !{val.fieldOne} 
     td 
      if val.fieldTwo 
      !{val.fieldTwo} 
     td 
      if val.fieldThree 
      !{val.fieldThree} 
     td 
      if val.fieldFour 
      !{val.fieldFour} 

我有一个在这里工作版本 - http://codepen.io/AdamCCFC/pen/akrjVv