Yii - 外部JS文件包括,registerScriptFile和发布

时间:2012-01-19 20:45:11

标签: yii

我正在为我的网络应用程序使用YII框架。我有一个关于注册外部Java脚本文件的问题。

有人可以帮助我吗?

  1. 复制Java脚本文件(哪个文件夹)
  2. 的最佳位置是什么
  3. 我确实看到有两种注册外部Java脚本的方法 文件

    第一种方法

     $baseUrl = Yii::app()->baseUrl; 
     $cs = Yii::app()->getClientScript();
     $cs->registerScriptFile($baseUrl.'/js/yourscript.js'); 
    

    第二个approch

     $cs=Yii::app()->getClientScript();
     $cs->registerScriptFile(Yii::app()->getAssetManager()->publish('path/to/js'));
     $cs->registerScript('id', 'your js here');
    
  4. 在第一种方法中,我直接使用registerScriptFile注册并传递java脚本文件

    在第二种方法中,我正在注册并发布脚本。这意味着它复制到资产文件夹。 (如果我错了,请纠正我) 然后是最后一步做什么,什么是id,又是java script file。 ($cs->registerScript('id', 'your js here');

    在我的情况下,我从其中一个视图访问它,所以在第二种方法,因为它被发布到资产文件夹,如果10个客户端调用该文件它发布10次(因为我从视图访问它文件)

    我有点困惑。

    感谢您的回答

    此致

    基兰

3 个答案:

答案 0 :(得分:15)

Yii Assets文件夹通常由Widgets和Yii的内部组件(如Gridview)使用。您无需将外部JS或CSS文件存储或发布到资产文件夹。

其次,如果资产文件夹getAssetManager()->publish('path/to/js')中已经存在的文件将不会复制它。

最后你不需要实例化CClientScript类,你可以直接调用它作为

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->baseUrl.'/js/file.js'
);

或者如果您使用主题

Yii::app()->clientScript->registerScriptFile(
    Yii::app()->theme->baseUrl.'/js/file.js'
);

答案 1 :(得分:2)

通常情况下,最好的方法是将您的JS文件放入web_root / js并使用$cs->registerScriptFile。 AssetManager便于在小部件中使用。您可以将JS文件放入受保护的文件夹中,并在需要时将它们发布到assets文件夹。如果您将publish()方法调用10次,则应仅发布您的文件。如果您将$forceCopy参数设置为true(默认为false),那么它可以复制10次,但是在同一个目录中。

答案 2 :(得分:0)

此问题已经得到解答 - https://stackoverflow.com/a/19210733/2670583 查看更多CClientScript for Yii