Yii-外部JS文件包括、registerScriptFile和publish

Yii-外部JS文件包括、registerScriptFile和publish,yii,Yii,我正在为我的web应用程序使用YII框架。我有一个关于注册外部Java脚本文件的问题 谁能帮帮我吗 复制Java脚本文件的最佳位置(哪个文件夹) 我知道有两种方法可以注册外部Java脚本 文件 第一种方法 $baseUrl = Yii::app()->baseUrl; $cs = Yii::app()->getClientScript(); $cs->registerScriptFile($baseUrl.'/js/yourscript.js'); 第二次接近 $

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

谁能帮帮我吗

  • 复制Java脚本文件的最佳位置(哪个文件夹)
  • 我知道有两种方法可以注册外部Java脚本 文件

    第一种方法

     $baseUrl = Yii::app()->baseUrl; 
     $cs = Yii::app()->getClientScript();
     $cs->registerScriptFile($baseUrl.'/js/yourscript.js'); 
    
    第二次接近

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

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

    在我的例子中,我是从一个视图访问它的,因此在第二种方法中,因为它被发布到资产文件夹,如果10个客户端调用该文件,它会发布10次(因为我是从视图文件访问它)

    我有点困惑

    谢谢你的回答

    问候


    Kiran

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

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

    其次,如果文件已经存在于资产文件夹
    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'
    );
    

    这个问题已获答覆—
    请参阅更多信息

    感谢Oleg的快速响应他没有实例化CClientScript类。可能是