zoukankan      html  css  js  c++  java
  • yii2中的事件和行为

    Event 事件

    事件是为了解耦...

    注册事件

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

    		namespace frontend	ests;
    		use yiiaseComponent;
    		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()确保自身的行为一定会被加载..

  • 相关阅读:
    maven scope 作用域
    MySQL数据库时区问题导致java程序无法连接数据库
    详细地址正则表达式
    java 重新学习 (七)
    .NET 多平台应用 UI介绍
    WPF关键帧动画
    RFID EPC Gen2 搜索模式和会话
    Razor 常用语法介绍
    Blazor 数据验证(6)
    Blazor 路由与页面导航(5)
  • 原文地址:https://www.cnblogs.com/zhepama/p/3851842.html
Copyright © 2011-2022 走看看