guzuomuse 2012-06-21 13:41:18 7054次浏览 8条回复 4 1 0

感谢一些热心的朋友(如lilongsy等)的帮助,分享一下自己的一点点的理解的东西,不对之处请指教

通过Yii的源码,结合生成的网页可知 当使用类似$this->widget('CActiveForm',array(…………));通过CActiveForm这个widget生成表单的时候,系统会自动注册jquery.yiiactiveform.js这个文件,并发布到assets文件夹目录下

通用如果使用了Jui的widget,不管是使用了哪个Jui,系统会自动注册jquery-ui.mine.js 由于引入了这个文件,像JuiDialogJuiAutoComplete等就可以通过创建widget直接使用了

关于$this->beginWidget()$this->endWidge()$this->widget();

疑问为什么写在$this->beginWidget()$this->endwidget()之间的内容会被自动放入到这个widget中去呢? 这是因为,通过查看源码可知beginWidget函数会调用init函数,而init函数会通过CHtml::openTag()创建一个标签,而endWidget()函数会通过CHtml::closeTag()创建一个标签的闭合,所以beginWidgetendWidget之间的内容会被放入到这个widget当中去。 关于beginWidget的说明:它的作用是创建一个widget并且初始化(通过init方法),endWidget的作用是:执行(通过run方法)此widget,并返回此widget对象.

那么$this->widget()方法是创建一个widget并且执行这个widget,也就是说它包括了benginWidgetendWidget两个的功能,因为是直接包括顺序执行了这两个方法,中间没有任何内容的添加,所以此用此方法创建的方法的内容是空的(当然,如果你的initrun方法中如果有输出,那肯定是有内容的,这里讨论的是最原始的未经扩展的情况下)。此外对于widget()方法还会有所不同,此方法的的参数是 public mixed widget(string $className, array $properties=array ( ), boolean $captureOutput=false) 可见此方法有3个参数,并且返回的值是一个不确定的类型(mixed),第一个参数代表处理此widget对应的类名,第二个是一个数组,用来设置初始化此widget,第三个参数是一个boolean型的,这也是为什么返回的值是不确定类型的原因,如果是false的话,返回的是一个widget对象,如果是true的话返回的是一个字符串,即此widget的输出内容。 而这里有很重要的一点就是,这里可以解释为什么我们用renderDynamic调用widget方法来在缓存页面中输出动态内容的时候,最后一个参数必须设置为true的原因。因为输出的必须是一个字符串而不可能是一个widget对象。即在视图中$this->renderDynamic('widget','path_of_this_widget',array('params_1'=>'value_1',……),true); OK,基本就理解了这些……

觉得很赞
  • 回复于 2012-06-21 13:59 举报

    只因有你们,yii才变得如此强大~~

  • 回复于 2012-06-22 07:25 举报

    解释的很清楚。。 收藏下。

  • 回复于 2012-07-16 09:40 举报

    .....mark.....

  • 回复于 2012-08-22 11:20 举报

    收藏 感谢分享

  • 回复于 2012-08-22 15:12 举报

    2gi
    学习了。

  • 回复于 2012-08-23 17:10 举报

    还没接触这么深的东西

  • 回复于 2012-08-29 17:09 举报

    今天 看了一下 有个问题 就是$this->widget('zii.widgets.grid.CGridView')。。。。。。
    这个路径是怎么怎么写的 是相对路径 还是怎样的呀
    我是想这样:
    yii自动生成的列表,就是manage的这个列表 表头显示的是 数据库的字段名,想给这个做个修改,有些束手无策,从网上找了找 是可以自己写一个文件,但是我不知道这个路径应该怎么写,如何调用我自己写的这个。
    求解

  • 回复于 2017-03-20 09:57 举报

    感谢楼主!!!!!!自己看了好久

您需要登录后才可以回复。登录 | 立即注册