我在cfm页面上使用了一些地理围栏脚本:
<cfscript>
function getDistance(loclat, loclon, fencelat, fencelon, units = 'kilometers')
{
// earth's radius. Default is miles.
var radius = 3959;
if (arguments.units EQ 'kilometers' )
radius = 6371;
else if (arguments.units EQ 'meters')
radius = 6371393;
else if (arguments.units EQ 'feet')
radius = 20903520;
var toRad = pi() / 180;
var dLat = (fencelat-loclat) * toRad;
var dLon = (fencelon-loclon) * toRad;
var a = sin(dLat/2)^2 + cos(loclat * toRad) * cos(fencelat * toRad) * sin(dLon/2)^2;
var c = 2 * createObject("java","java.lang.Math").atan2(sqr(a), sqr(1-a));
return radius * c;
}
</cfscript>
然后,我查询我的地理围栏表和那些已为特定设备设置地理围栏的记录的输出列表。当地理围栏查询返回多条记录时,cfoutput
会循环这些记录,而cfoutput
中的代码会调用js函数,我会收到一条错误,告知该函数已在一个模板中被调用了2次。
我“假设”解决方案是将脚本函数本身放在cfoutput
中,并通过将每个函数的recordid附加到函数名称来使函数名称唯一。这是正确的解决方案吗?
如果是,我的问题是如何动态地将记录id附加到cfscript中的函数名?例如:
function getDistance#recid#(loclat, loclon, fencelat, fencelon, units = 'kilometers')
然后当我调用函数值时,输出
<cfif #fence_meter_radius# gt #getDistance(loclat, loclon, latitude, longitude, 'kilometers')#>
我欢迎任何有关上述内容的协助。