Event 事件

事件是为了解耦...

注册事件

使用"on add"添加属性,注册事件 使用on方法注册事件. 第三个参数$data是监听函数使用的参数, 第四个$append参数设置为false则把改事件的方法给添加到最前面,会先触发 事件种类: 匿名函数:function($event){} 对象方法:[$object,"handleAdd"] 静态类方法:["Page","handleAdd"] 全局函数:"handleAdd"

		namespace frontend\tests;
use yii\base\Component;
class EventTest extends Component{ } $a = new EventTest();
$p = "on add";
$a->$p = function($event){
print "匿名函数";
}
function add($event){
print "全局函数";
}
$a->on("add", "add"); $a->trigger("add");

触发事件

触发事件的时候,会传送一个$event对象给监听函数.该事件对象有sender.name.$handled和data以及$_events属性 sender 就是组件本身,事件的发送者 name 事件名称 handled 设置该属性可以阻止事件的继续触发..比如判断登录错误.验证一个事件时出现错误.把这个设置为true.就不会继续传播了 $_events 存储的数据是$_events[$name][$class] 事件名...类名..最后会根据类名再循环找到所有的父类的事件

        $this->ensureBehaviors();  //确保自身behaviors()函数中的行为被添加
if (!empty($this->_events[$name])) {
if ($event === null) {
$event = new Event;
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($this->_events[$name] as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) { //如果false则直接返回
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);//执行事件本身的events,

注意最后一步,你可以为某个有继承关系的类自定义一个事件..这里会执行父类的事件

移除事件

使用off移除事件.没什么好说的了

Behavior 行为

无论是事件还是行为,经常能够看到这个方法ensureBehaviors() 该方法确保该组件默认的behaviors()方法中的组件总是被加载的... 没弄明白,yii作者为什么这么写...放在构造函数中执行一次不是更好...

行为的使用

  • 1.行为中的属性,在该类中也可以使用
  • 2.行为中的方法,在该类中也可以使用
  • 3.继承与Behavior类的行为,会将其自身的$_events中的事件绑定到该类

注册行为

attachBehavior,attachBehaviors 这两个首先会执行ensureBehaviors()确保自身的行为一定会被加载..

yii2中的事件和行为的更多相关文章

  1. YII2中behavior行为的理解与使用

    YII2中的行为说白了就是对组件功能的扩展,在不改变继承关系的条件下. 行为附加到组件后,行为将注入自已的方法和属性到组件,可以像组件访问自定义的方法和属性一样访问行为. 注意行为是对功能的扩展,不要 ...

  2. C++中的事件分发

    本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...

  3. javascript中的事件冒泡和事件捕获

    1.事件冒泡 IE 的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).以下面的HTML ...

  4. yii2中如何使用modal弹窗之基本使用

    作者:白狼 出处:http://www.manks.top/yii2_modal_baseuse.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...

  5. jQuery文本框中的事件应用

    jQuery文本框中的事件应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  6. 怎么理解js中的事件委托

    怎么理解js中的事件委托 时间 2015-01-15 00:59:59  SegmentFault 原文  http://segmentfault.com/blog/sunchengli/119000 ...

  7. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  8. 四、jquery中的事件与应用

    当用户浏览页面时,浏览器会对页面代码进行解释或编译--这个过程实质上是通过时间来驱动的,即页面在加载时,执行一个Load事件,在这个事件中实现浏览器编译页面代码的过程.时间无论在页面元素本身还是在元素 ...

  9. ActiveX(二)Js 监听 ActiveX中的事件

    在上一篇随笔:ActiveX(一)第一个简单的Demo 中,已经可以实现 js 单向调用 ActiveX 中的方法,在很多情况下ActiveX中的方法的执行时相对耗时.耗性能的.在这样的情况下.Act ...

随机推荐

  1. 使用Spark读写CSV格式文件(转)

    原文链接:使用Spark读写CSV格式文件 CSV格式的文件也称为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号.在本文中的CSV格 ...

  2. 使用PowerDesigner建立数据库模型【转】

    1. 打开PowerDesigner,点击File->New 2. 选择Conceptual Data Model,并修改Model name. 3.  在Palette工具栏中点击Entity ...

  3. TensorFlow进阶(五)---图与会话

    图与会话 图 tf.Graph TensorFlow计算,表示为数据流图.一个图包含一组表示 tf.Operation计算单位的对象和tf.Tensor表示操作之间流动的数据单元的对象.默认Graph ...

  4. Thinkphp学习笔记7-输入变量

    在Web开发过程中,我们经常需要获取系统变量或者用户提交的数据,这些变量数据错综复杂,而且一不小心就容易引起安全隐患,但是如果利用好ThinkPHP提供的变量获取功能,就可以轻松的获取和驾驭变量了. ...

  5. Transfrom在64bit服务下面无法运行

    利用TR发布了一个cube到Cognos connection里面,利用Analysis Studio打开的时候报错如下 问题是很简单的,按照报错内容看是当前的64bit的report  servic ...

  6. Python网络爬虫 - 2. Beautiful Soup小试牛刀

    目标: 我们解析百度首页的logo bs_baidu_logo.py from urllib.request import urlopen from bs4 import BeautifulSoup ...

  7. PHP Libxml函数

    PHP Libxml 函数 PHP Libxml 简介 Libxml 函数和常量与 SimpleXML.XSLT 以及 DOM 函数一起使用. 安装 这些函数需要 Libxml 程序包. 在 xmls ...

  8. Androidclient性能參数监控

    背景: 在做androidclient測试的时候.有时候须要监控cpu/mem/电量消耗/界面载入时间/流量等等指标. 于是俺们就上下求索,网友告诉我两个方案:AnotherMonitor和Emmag ...

  9. 算法笔记_021:广度优先查找(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 1 问题描述 广度优先查找(Breadth-first Search,BFS)按照一种同心圆的方式,首先访问所有和初始顶点邻接的顶点,然后是离它两条边 ...

  10. Linux回环接口(loop-back/loopback)

    回环接口(loop-back/loopback) Moakap整理 Loopback接口是一个虚拟网络接口,在不同的领域,其含义也大不一样. 1. TCP/IP协议栈中的loopback接口 在TCP ...