依赖于 Yii2 中 JavaScript 代码块的 JavaScript 文件(用于 dojo 配置)

Posted

技术标签:

【中文标题】依赖于 Yii2 中 JavaScript 代码块的 JavaScript 文件(用于 dojo 配置)【英文标题】:JavaScript file dependend on JavaScript code block in Yii2 (for dojo configuration) 【发布时间】:2015-08-12 12:11:29 【问题描述】:

我正在尝试使用 Yii 2.0 注册 dojo javascript 文件。 根据 dojo 文档,dojo 配置的代码块必须在实际的 dojo.js 之前加载才能被考虑。但是,在 html 输出中,我的自定义 javascript 代码总是在 dojo.js 之后加载。

这是我的代码:

$this->registerJs('dojoConfig="async:true,isDebug:true";', $this::POS_HEAD,'dojoconfiguration');
$this->registerJsFile('/dojo_toolkit/dojo/dojo.js', ['depends' => [\yii\web\JqueryAsset::className()], 'position' => yii\web\View::POS_HEAD]);

在 HTML 中它看起来像这样:

<script src="/dojo_toolkit/dojo/dojo.js"></script>
<script type="text/javascript">dojoConfig="async:true,isDebug:true";</script>

有什么建议吗?

【问题讨论】:

【参考方案1】:

对于相同的位置,Yii2 总是先放置内联脚本,然后才是实际的外部文件。因此,您无法通过将它们都添加到 &lt;head&gt; 来解决此问题。

最好给registerJsFile() 调用POS_END 以在最后加载它。在调用document.ready() 之前,它仍然会被加载。

这样您就可以确保在加载之前解析了标头中的配置。在最坏的情况下,您可以在 body 标签打开后立即使用POS_BEGIN 加载它,但由于加载 javascript 被阻止,我会尽量避免这种情况。

【讨论】:

以上是关于依赖于 Yii2 中 JavaScript 代码块的 JavaScript 文件(用于 dojo 配置)的主要内容,如果未能解决你的问题,请参考以下文章

yii2 随笔依赖注入——yii2的依赖注入

javascript进阶笔记

如何使用yii2的缓存依赖特性

使用 asm.js 将依赖于外部库的代码转换为 javascript

两个库搞定python中引用javascript代码块/文件

yii2 - 如何在 javascript 中设置 kartik select2 值