最近工作中写freemarker的时候碰到一种情况如下:
$("#obj").jqplot({ <#if arg0??>arg0: ${arg0?html}, <#/if> <#if arg1??>arg1: ${arg1?html}, <#/if> <#if arg2??>arg2: ${arg1?html}, <#/if> arg3: "arg3" });
jqplot方法的入参是一个Object类型的js对象,因为需要判断入参是否放在了freemarker的参数列表里,所以使用了if语句,同时为了保证当所有参数都不存在时入参还是能够被正确解析的js对象,这里取巧添加了一个并没有实际意义的arg3: "arg3"。
这种用法颇有点写java的sqlMap的意思。
select * from tableName
where 1=1
<#if arg0??>and arg0=${arg0}</#if>
虽然问题解决了,但总是觉得不是那么的优雅。
mybatis书写动态sql时可以用的种种强大表达式,遗憾的是目前我还没在freemarker中找到相对应的方法。
幸好js还算是很灵活的语言,可以使用另外一种灵活且优雅的方法来处理这种js动态参数的问题。
var configJson = {}; <#if arg0??>configJson.arg0 = ${arg0?html};<#/if> <#if arg1??>configJson.arg1 = ${arg1?html}; <#/if> <#if arg2??>configJson.arg2 = ${arg1?html}; <#/if> $("#obj").jqplot( configJson );
通过新建一个空的js对象,使用“对象.属性”的方法设置js的属性。顿时觉得高端大气上档次了,有没有?