我在Twig模板上生成一些JS变量,并在前面添加动态值。例如:
<script type="text/javascript">
quoteGridId = 'grid_quote';
</script>
<script type="text/javascript">
quoteContactGridId = 'grid_quote_contact';
</script>
<script type="text/javascript">
archiveGridId = 'grid_archive';
</script>
我需要能够在页面加载后包含的Javascript文件中使用它们。如何创建包含所有* GridId变量的值数组?
我希望能够在脚本上使用以下内容:
[
'quoteGridId' => 'grid_quote',
'quoteContactGridId' => 'grid_quote_contact',
'archiveGridId' => 'grid_archive',
]
更新
让我们试着让我的问题清楚,让那些开放的人帮忙。目前我正在研究遗留系统。这样的系统有一个生成gridId
值的网格,最后包含一个JS文件,这样的文件使用var gridId
来执行几个操作。
现在我需要在同一页面上复制多个网格,这会成为一个问题,因为两个网格生成相同的var名称:
gridId = 'something';
gridId = 'something1';
当脚本尝试到达gridId
时,var始终是最新的(something1),因此在第一个网格上没有采取任何操作。
我的解决方案是将名称添加到每个gridId
的前缀,从而产生我作为OP的内容。例如:
somethingGridId ='某事'; something1GridId ='something1';
我想要找到的是通过传递那些动态gridId来重用主JS文件的方法,但我找不到让它工作的方法。
我唯一想到的解决方案是每个网格创建相同的文件,然后将gridId的值更改为要使用的ID的名称....
我愿意接受任何想法吗?
答案 0 :(得分:0)
为什么不创建顶级对象,然后将每个var指定为键值对,而不是分配quoteGridId = 'grid_quote'
,如:
var gridData = {}
gridData.quoteGridId = 'grid_quote'
gridData.quoteContactGridId = 'grid_quote_contact';
/* etc assignments */
//Access your data points like so in a loop, if you choose
Object.keys(gridData).forEach(key => {
const val = gridData[key]
//User `key`, and `val` however you'd like
})
答案 1 :(得分:0)
您可以使用正则表达式(正则表达式表达式?)搜索窗口变量,即/.+GridId/
匹配以GridId
结尾的任何单词或变量,然后您可以根据需要迭代它们。
示例:强>
var pattern = /.+GridId/;
GridIds = []
for (var varName in window) {
if (pattern.test(varName)) {
GridIds.push({varName:window[varName]})
}
}
console.log(GridIds);
&#13;
<script type="text/javascript">
quoteGridId = 'grid_quote';
</script>
<script type="text/javascript">
quoteContactGridId = 'grid_quote_contact';
</script>
<script type="text/javascript">
archiveGridId = 'grid_archive';
</script>
&#13;
希望这有帮助!
答案 2 :(得分:0)
我想你让你使用List。 每当你将值推到列表中时:
var myList = [];
myList.push('something');
myList.push('something1');
现在你可以像这样访问所有这些:
console.log(myList[0]);
console.log(myList[1]);
或者只是持续:
console.log(myList[myList.length - 1])