我正在为我的网络应用程序使用YII框架。我有一个关于注册外部Java脚本文件的问题。
有人可以帮助我吗?
我确实看到有两种注册外部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');
在第一种方法中,我直接使用registerScriptFile注册并传递java脚本文件
在第二种方法中,我正在注册并发布脚本。这意味着它复制到资产文件夹。 (如果我错了,请纠正我)
然后是最后一步做什么,什么是id
,又是java script file
。 ($cs->registerScript('id', 'your js here');
)
在我的情况下,我从其中一个视图访问它,所以在第二种方法,因为它被发布到资产文件夹,如果10个客户端调用该文件它发布10次(因为我从视图访问它文件)
我有点困惑。
感谢您的回答
此致
基兰
答案 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