111
(西瓜)
1
js的加载好像是通过framework\web\CClientScript.php进行处理。
framework/web/js/packages.php定义了js对应的文件和依存关系。
js存放在framework\web\js\source下面
这样一来如果我想自己添加几个js则必须修改framework/web/js/packages.php。并把文件放到framework\web\js\source处。这样的话我还是修改了framework文件夹。不便于下次框架升级。我想问一下有没有其他的办法能方便的进行加载。
我觉得是不是可以让在应用目录里的也有对应的packages和js文件,CClientScript类在处理的时候,把两处的数组合并起来,这样会不会好点呢。
框架有没有方便读取actionId以及controllerID的方法。因为有时候我需要获取这两个参数传递给下一个页面。或者我希望不同的页面下用不同的布局,这需要读取actionId和controllerID。我觉得这个方法是不是可以放到router中或者application中?没有找到
我现在用 Yii::app()->getUrlManager()->parseUrl(Yii::app()->getRequest()); 读取,感觉很不方便。
谢谢
qiang
(Qiang Xue)
2
package.php里定义的是core js,也就是说你可以通过Yii::app()->clientScript->registerCoreScript()来使用的。
如果是你自己的js,那你应该通过调用registerScriptFile()。不要去修改packages.php
当前actionId, controllerID可以通过:
Yii::app()->controller->id (或$this->id如果$this代表的是当前controller),以及$controller->action->id
111
(西瓜)
4
但是使用registerScriptFile会不支持js文件之间的关系。也就是说我用registerScriptFile加载一个需要jquery的js。是不是还得先把jquery.js加载进来。但是我不知道yii是否在核心js里已经加载了。因为在有的页面或许有,有的或许没有。而我要加载的js则是各个页面通用的。
这样一来其实会造成页面加载两次jquery库呢
ps
明白了 我提前 registerCoreScript("jquery")就好了 谢谢
ps
刚看到 1.07 有了CClientScript::POS_READY
jquery.js已经默认包含进来了,你不需要再重新加载这个js文件了。
111
(西瓜)
6
jquery 不是默认的 也就是说不是每个页面都会加载,虽然在很多操作中yii会自动的调用进来。
qiang
(Qiang Xue)
7
对,如果需要jquery,就调用registerCoreScript("jquery")好了。重复调用没关系的。