1

Yii 中的许多模块、扩展或其他东西都试图从资产管理器中加载 jQuery。这很好,我已经停止对包含进行硬编码,而是采用了“registerCoreScript”。

唯一的问题是它似乎在 HEAD 底部附近加载它。我有很多其他依赖于 jQuery 的脚本和代码,它们是在它之前加载的。我如何确保 jQuery 是第一个加载的东西?

事实是我不明白这不是默认行为。jQuery 不依赖任何东西,但是很多脚本都依赖它...

4

3 回答 3

4

您可以使用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 分组到一个包中并为其命名,或者将每个脚本声明为一个包。


相关答案:thisthis

于 2012-11-08T11:08:32.600 回答
0
  1. 不要<script>在 html 中使用硬编码标签
  2. 放在函数Yii::app()->clientScript->registerCoreScript('jquery');的开头。Controller::init()
  3. 包括你自己的脚本使用Yii::app()->clientScript->registerScriptFile('....');
于 2012-11-08T13:20:17.283 回答
0

如果您的评论中对硬编码脚本的引用意味着您的布局文件中有<script>标签<style><head>那么是的,使用任何 Yii 方法注册脚本都会导致该脚本最后出现,因为 Yii 方法会附加 javascript中的任何现有内容<head>(如果您想验证,请阅读源代码)。

理想情况下,您应该将 javascript 外部化到一个单独的文件中,并使用registerScriptFile()加载该文件。这使事情更清洁,更容易维护。

或者,您可以使用registerScript(),但这可能难以阅读/维护。

使用这些方法时,将按照调用方法的顺序添加项目。

于 2012-11-08T17:10:08.460 回答