用Thymeleaf连接变量名

时间:2015-08-19 07:39:46

标签: javascript thymeleaf

我尝试连接一个变量名,但它没有按预期工作:

<script type="text/javascript" th:inline="javascript">/*<![CDATA[*/
var jc[[${f.hash}]];
/*]]>*/</script>

结果:var jc'e4407ca0c7899e91403e94719d132c3c5d31c87cf5b3b60a1a7daecc8dff3360';

预期:var jce4407ca0c7899e91403e94719d132c3c5d31c87cf5b3b60a1a7daecc8dff3360;

2 个答案:

答案 0 :(得分:1)

看起来你想声明一个变量由变量定义的变量。我无法弄清楚为什么,但如果真的是你想要做的事情:

您可以使用

var hash = [[${f.hash}]];
eval('var jc'+hash);

这在严格模式下无效。如果实施某些安全策略,它也将无法工作。

如果要在全局范围内创建变量,还可以使用

var hash = [[${f.hash}]]; 
window['jc'+hash] = undefined; //In browser application
global['jc'+hash] = undefined; //In node.js environment

或者如果你想在函数中声明一个变量

this['jc'+hash] = undefined;

注意:尽管JS sintax允许您使用所有这些选项,但我不建议您执行此操作,无论您遇到什么问题。它被认为是一种糟糕的做法,我99%肯定它可以在不使用奇怪的技巧的情况下完成。难以维护的代码并不酷。任何阅读此内容的人都很难理解为什么会这样。

答案 1 :(得分:0)

在我需要创建一堆具有不同名称的handler个javascript对象时,我遇到了一些相同的问题。

我在我的javascript代码中使用了以下内容

<script th:inline="javascript">
/*<![CDATA[*/
var handler[[${iter.index}]] = new Handler();
...
handler[[${iter.index}]].close();
/*]]>*/
</script>

他的输出是这样的:

<script>
var handler0 = new Handler();
...
handler0.close();
</script>

<script>
var handler1 = new Handler();
...
handler1.close();
</script>

这正是我所需要的。