简而言之:
<script type="text/javascript">
var root = '${config.root}';
var userLanguage = '${config.language}';
var userTimezone = '${config.timezone}';
</script>
<script type="text/javascript" src="js/scripts.js"></script>
然后,在scripts.js
中,依赖这些变量:
if (userLanguage == 'en') { .. }
${..}
只是生成页面的脚本中值的占位符。它可以是php,jsp,asp,等等。关键是 - 它是动态的,因此它不能成为.js
文件的一部分(它是静态的)。
那么,静态javascript文件可以依赖这些外部定义的配置变量吗? (当然,它们主要是配置)。
或者是否优先使动态提供.js
文件(即将其设为.php / .jsp,并使用正确的Content-Type
),并在其中定义这些值。
答案 0 :(得分:1)
您可以按照jquery plugins中使用的示例进行操作。它们以特定格式定义参数的默认值,这些格式可能会被用户重载。所以在我看来,允许用户以外部脚本使用的文档格式定义一些变量是可以的。
答案 1 :(得分:1)
假设配置变量的特定值仅在运行时已知(即无法静态生成配置),将配置包含在实际脚本中是没有意义的,因为这样会使正确的缓存无法实现。
如果页面的其余部分是静态的(或仅在内容更改时重新生成),那么在服务器端动态生成专用config.js
而不是将配置嵌入到HTML中可能是个好主意。 。如果页面是动态的,我认为嵌入配置没有错。
如果您赞同完全分离标记和脚本的原则,您可以在标记中对转换进行编码(例如,通过lang
属性和cutom类),但纯粹主义观点不一定是最相关的。 / p>
答案 2 :(得分:1)
一般来说,我认为最佳做法是使javascript文件自包含,而不依赖于任何外部变量。
也就是说,在某些情况下,根据外部变量做正确的事情,我会说这是其中之一。注意:
答案 3 :(得分:1)
通常更好的想法是在初始化外部脚本中定义的组件时显式传递配置,如下所示:
<script type="text/javascript" src="js/scripts.js"></script>
<script type="text/javascript">
MyApp.init(${config});
</script>