簡體   English   中英

將變量名稱與Thymeleaf連接

[英]Concatenate variable name with Thymeleaf

我嘗試連接一個變量名,但是它不能按預期工作:

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

結果: var jc'e4407ca0c7899e91403e94719d132c3c5d31c87cf5b3b60a1a7daecc8dff3360';

預期: var jce4407ca0c7899e91403e94719d132c3c5d31c87cf5b3b60a1a7daecc8dff3360;

似乎您想聲明一個變量,其名稱由變量定義。 我不知道為什么,但是如果那確實是您想要做的:

你可以用

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%的肯定它可以完成而無需使用怪異的技巧。 難以維護的代碼並不酷。 閱讀此書的任何人都將很難理解它的原因。

我在做一些工作時遇到了同樣的問題,我需要創建一堆具有不同名稱的類似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>

這正是我所需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM