请教一下 js的加载和actionId的读取 中遇到的问题

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()); 读取,感觉很不方便。

谢谢

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

谢谢qiang

但是使用registerScriptFile会不支持js文件之间的关系。也就是说我用registerScriptFile加载一个需要jquery的js。是不是还得先把jquery.js加载进来。但是我不知道yii是否在核心js里已经加载了。因为在有的页面或许有,有的或许没有。而我要加载的js则是各个页面通用的。

这样一来其实会造成页面加载两次jquery库呢

ps

明白了 我提前 registerCoreScript("jquery")就好了  谢谢

ps

刚看到 1.07 有了CClientScript::POS_READY

jquery.js已经默认包含进来了,你不需要再重新加载这个js文件了。

jquery 不是默认的 也就是说不是每个页面都会加载,虽然在很多操作中yii会自动的调用进来。

对,如果需要jquery,就调用registerCoreScript("jquery")好了。重复调用没关系的。