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

JavaScript file dependend on JavaScript code block in Yii2 (for dojo configuration)

我正在尝试使用 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>

有什么建议吗?

对于相同的位置,Yii2 总是先放置内联脚本,然后再放置实际的外部文件。所以你不能通过将它们都添加到 <head>.

来解决这个问题

最好在最后给 registerJsFile() 调用一个 POS_END 来加载它。它仍将在 document.ready() 调用之前加载。

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