javascript - 检查 Jade 中是否存在字段

标签 javascript pug

考虑 Jade 的这段代码:

if(#{episode[question.name][field]})
   #{episode[question.name][field]}

我想检查 episode[question.name][field] 的值是否存在。如果是,则在下一行输出该值。

500 SyntaxError: Unexpected token ILLEGAL

这是当前来源和更多信息。

h1= title

p 欢迎来到#{title}

ol#questions
    each question in questions
        li  
            ul#question
                li: h3  (#{question.name})  #{question.description}
                - if(question.options)
                    ul#options
                        for option, i in question.options
                            if(typeof(option) === "object")
                                li: h3  #{i}
                                ul#option
                                        each soption in option
                                            li
                                                input(type='checkbox',  name='episode[#{question.name}][#{soption}]',   checked='#{episode[question.name][soption]}')
                                                //
                                                label
                                                    #{soption}  
                            else
                                li
                                    input(type='checkbox',  name='episode[#{question.name}][#{option}]',    checked='#{episode[question.name][option]}')
                                    //
                                    label
                                        #{option}
                if(typeof(question.fields) !== 'undefined')
                    for field, i in question.fields
                        if(field === "Date")
                            p.date
                                if(#{episode[question.name][field]} !== "undefined")                    
                                    #{episode[question.name][field]}
                        else
                            p                       
                                input(name='episode[#{question.name}][#{field}]', class='', value="#{episode[question.name][field]}")

这里是传入的数据对象

 episode =   {
  "form": {
    "formid": "4efd9c4cae999dcf0a12c461",
    "name": "ROC"
  },
  "patientid": ObjectId("4ef6835a7a5869082a80bc95"),
  "certperiodid": ObjectId("4f020ff0850b21bc2b000001"),
  "M0080": {
    "2-PT": "on",
    "3-SLP\/ST": "on",
    "4-OT": "on"
  },
  "M0090": {
    "Date": "2012-01-02"
  },
  "M0100": {
    "1 - Start of care--further visits planned": "on",
    "3 - Resumption of care (after inpatient stay)": "on"
  },
  "M00104": {
    "Date": "2012-05-02"
  },
  "_id": ObjectId("4f071a0424ddf0dd66000003")
}

如何修复并正确编写?

例如,如果其中一个日期字段为空(未填写),为了防止错误,我需要在输出值之前检查它是否不为空。

再次提前致谢

最佳答案

表达式不应使用转义:

- if (episode[question.name][field])
  foo

(显然,假设变量设置正确。)


编辑以回复评论

在日期显示和输入元素中尝试读取字段之前,您没有先检查元素是否存在...虽然您的用例仍然有点不透明,但您需要检查元素第一:

- if (episode[question.name] && episode[question.name][field])",

认为您正在尝试为没有值的事物显示一个输入元素,并以其他方式显示它——不太确定。你可能想要更接近这个的东西(不知道你在做什么,我制作了一个假模板,我认为它反射(reflect)了你的数据——我评论了 "2-PT" 值去测试)。一些小的重构来清理东西,但不多。

var s = [
  "ol#questions",
  "  each question in questions",
  "    li",
  "      ul.question",
  "        li: h3  (#{question.name})  #{question.description}",
  "        if question.fields",
  "          each field, i in question.fields",
  "            - var foo = field === 'Date' ? 'date' : ''",
  "            p(class='#{foo}')",
  "              if episode[question.name]",
  "                - var field_value = episode[question.name][field] || '' ",
  "                if field_value",
  "                  #{field_value}",
  "                else",
  "                  input(name='episode[#{question.name}][#{field}]', class='', value='#{field_value}')",
  ""
].join("\n");

var locals = {
  "question": {
    "name": "M00104"
  },
  "episode": {
    "M00104": {
      // "2-PT": "on",
      "Date": "2012-01-02"
    }
  },
  "questions": [
    {
      "name": "M00104",
      "description": "Do we have it?",
      "fields": ["Date", "2-PT"]
    },
  ]
}

var jade = require('jade');
var fn = jade.compile(s);
console.log(fn(locals));

整理后:

<ol id="questions">
  <li>
    <ul class="question">
      <li>
        <h3>(M00104) Do we have it?</h3>
      </li>

      <li style="list-style: none; display: inline">
        <p class="date">2012-01-02</p>

        <p class="">on</p>
      </li>
    </ul>
  </li>
</ol>

注释掉 "2-PT" 行:

<p class=""><input name="episode[M00104][2-PT]" value="" class=""></p>

关于javascript - 检查 Jade 中是否存在字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8761761/

相关文章:

javascript - webpack 中使用的 javascript 导入/导出问题

javascript - 使用 jquery 在加载页面上的 strust2 中自动完成

javascript - 为什么 Javascript 对象显示出如此多的层次结构?如何正确声明和访问?

javascript - Jade 的问题,意外的字符 #

node.js - 哪个Node.js模板引擎在服务器端使用时性能最好?

javascript - 如何在javascript中获取属性值

javascript - 对象在被赋值之前就已经有了值

angularjs - Jade + AngularJS

html - 如何使用带有标准 HTML 而不是 Jade 的 Piler?

javascript - 快速表单解析不起作用