日期:2014-05-16  浏览次数:20397 次

freemarker中巧妙处理Object类型的js参数

最近工作中写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的属性。顿时觉得高端大气上档次了,有没有?