考虑 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/