【发布时间】:2016-04-28 15:08:54
【问题描述】:
我正在尝试将一个新创建的对象传递给我的 dot.js 部分 sn-p,如下所示:
try {
var tempFn = doT.template($('#myTpl').text());
var resultText = tempFn({
"foo": "this snippet"
});
$('#result').html(resultText);
} catch (e) {
$('#error').show().html(e);
throw e;
}
#error {
font-weight: bold;
border: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dot/1.0.3/doT.js"></script>
<!-- Template HERE -->
<script id="myTpl" type="template/doT.js">//<![CDATA[
{{##def.snippet:obj:
<div>How to use {{=obj.x}}</div>
#}}
{{#def.snippet:{"x":it.foo}}}
// ]]></script>
<div id="result"></div>
<div id="error" style="display: none;"></div>
但我得到Template has an error: SyntaxError: Unexpected token :
那么如何创建对象(或多个参数)并将其传递给定义的部分?
怎么了?
编辑:
我有一个来自类似 REST 网络服务的日程安排结构:
"schedule": {
"MONDAY": {
"amOpenTime": {
"hours": 8,
"minutes": 30
},
"amCloseTime": null,
"pmOpenTime": null,
"pmCloseTime": {
"hours": 17,
"minutes": 0
}
},
"TUESDAY": {
"amOpenTime": {
"hours": 8,
"minutes": 31
},
"amCloseTime": null,
"pmOpenTime": null,
"pmCloseTime": {
"hours": 17,
"minutes": 40
}
},
....
}
我不想每天重复我的模板,因为它们必须以相同的方式处理(干!) 所以我考虑使用部分 sn-p 打印我的日程安排的每一行(早上开/关时间和下午开/关时间)。 因此,由于早上和下午的 div 会以同样的方式受到威胁,我想创建第二个 sn-p 来处理这个问题。但是对于早上我只需要传递 am 前缀的数据和 pm 前缀的下午数据:
{{##def.scheduleHalfDay:fday:
// multiple condition that I ommited
<div class="closed {{fday.type}}">{{fday.openTime.hours}}:{{fday.openTime.minutes}} - {{fday.closeTime.hours}}:{{fday.closeTime.minutes}}</div>
#}}
{{##def.scheduleRow:hday:
{{? (typeof hday.amOpenTime === "undefined" || hday.amOpenTime === null) && (typeof hday.pmCloseTime === "undefined" || hday.pmCloseTime == null) }}
<div class="closed">Closed</div>
{{??}}
{{#def.scheduleHalfDay:{"type": "morning", "openTime": hday.amOpenTime, "closeTime": hday.amCloseTime}}}--{{#def.scheduleHalfDay:{"type": "afternoon", "openTime": hday.pmOpenTime, "closeTime": hday.pmCloseTime}}}
{{?}}
#}}
<div class="agency-schedules">
<div class="line"><div class="agency-schedules-day">Monday</div>{{#def.scheduleRow:it.horaires.MONDAY}}</div>
<div class="line"><div class="agency-schedules-day">Tuesday</div>{{#def.scheduleRow:it.horaires.TUESDAY}}</div>
...
</div>
scheduleHalfDay 不起作用。那么如何正确传递我的 3 个参数(不更改数据结构)?
【问题讨论】:
标签: javascript template-engine dot.js