【问题标题】:Yii Make jQuery load firstYii 先加载 jQuery
【发布时间】:2012-11-08 10:10:27
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为没有办法改变头部的位置。我认为脚本是按照它们在您的 php 中声明的顺序添加到 DOM 中的,难道不能将您的 registerCoreScript 函数移到其他脚本调用之上吗?
  • registerCoreScript 是我在布局文件中进行的第一个调用,甚至在打开 <html> 之前。之后我有一系列硬编码的 javascripts 和 css。
  • 内容将附加到您在<head> 中的任何内容中,有关详细信息,请参阅我的答案

标签: jquery yii assets


【解决方案1】:

你可以使用packagesproperty of 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

【讨论】:

  • 通过硬编码的 javascript 我以为你的意思是:<script type="text/javascript" src="some.js"> 或者你的意思是:<script type="text/javascript"> ... </script>
  • 我都有。但你是对的,我采用了你的方法,重新组织了我所有的脚本。
【解决方案2】:
  1. 不要在你的html中使用硬编码的<script>标签
  2. Yii::app()->clientScript->registerCoreScript('jquery'); 放在Controller::init() 函数的开头。
  3. 使用Yii::app()->clientScript->registerScriptFile('....'); 包含您自己的脚本

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2017-04-14
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多