Yii 中的许多模块、扩展或其他东西都试图从资产管理器中加载 jQuery。这很好,我已经停止对包含进行硬编码,而是采用了“registerCoreScript”。
唯一的问题是它似乎在 HEAD 底部附近加载它。我有很多其他依赖于 jQuery 的脚本和代码,它们是在它之前加载的。我如何确保 jQuery 是第一个加载的东西?
事实是我不明白这不是默认行为。jQuery 不依赖任何东西,但是很多脚本都依赖它...
您可以使用packages
CClientScript组件的属性,并指定depends
:
Yii::app()->clientScript->addPackage('give-some-name-to-script', array(
'baseUrl'=>'base URL for the script files', // or basePath
'js'=>array(list of js files relative to basePath/baseUrl),
'depends'=>array('jquery')
));
或者在config/main.php配置中这样做:
'clientScript'=>array(
'packages'=>array(
'give-this-package-name'=>array(
'basePath'=>'alias of the directory containing the script files',
'js'=>array('first.js','second.js'),
'depends'=>array('jquery')
),
)
然后使用registerPackage
:
Yii::app()->clientScript->registerPackage('your-package-name');
我认为这是唯一可以做到的方法。当然,这需要您将 javascript 分组到一个包中并为其命名,或者将每个脚本声明为一个包。
<script>
在 html 中使用硬编码标签Yii::app()->clientScript->registerCoreScript('jquery');
的开头。Controller::init()
Yii::app()->clientScript->registerScriptFile('....');
如果您的评论中对硬编码脚本的引用意味着您的布局文件中有<script>
标签<style>
,<head>
那么是的,使用任何 Yii 方法注册脚本都会导致该脚本最后出现,因为 Yii 方法会附加 javascript中的任何现有内容<head>
(如果您想验证,请阅读源代码)。
理想情况下,您应该将 javascript 外部化到一个单独的文件中,并使用registerScriptFile()加载该文件。这使事情更清洁,更容易维护。
或者,您可以使用registerScript(),但这可能难以阅读/维护。
使用这些方法时,将按照调用方法的顺序添加项目。