POX学习笔记之组件注册与事件

本文详细介绍了POX框架中组件的注册方式,包括core.register和core.registerNew,以及事件的定义和处理函数的关联方法,如addListener系列方法。同时,解释了事件触发的机制和POX的总体架构,强调了事件监听者如何通过listenTo方法响应事件。
摘要由CSDN通过智能技术生成
一、组件向core注册的方法
1. core.register("core中组件的名字",组件类的实例):创建实例时参数已经传入
2. core.registerNew(组件类名,参数...):若要修改在core中组件的名字,需要在组件类定义时加一个属性_core_name = "新名字"。它只是register的一个封装。
以上两种方法注册的时候都会创建类的实例,因而会调用组件类的__init__函数。
二、定义事件
POX中的事件都是revent.Event类的子类的实例。
class 事件名(Event):
     类定义
三、关联事件处理函数的方法
1. 能触发事件的类的实例.addListener(事件类, 事件处理函数):事件类必须在作用域内,要不然不识别
2. 能触发事件的类的实例.addListenerByName("事件类名", 事件处理函数):事件类可以不在作用域内,仅传递一个类名字符串
3. 能触发事件的类的实例.addListeners(事件处理函数所在类的实例):以foo.addListeners(bar)为例,POX将检查foo能触发的每个事件EventName,若在bar所在类有_handle_EventName函数,则自动关联处理函数。
4. 能触发事件的类的实例.addListeners(事件处理函数所在类的实例,prefix="前缀名"):当处理函数所在类要处理来自多源的相同事件时,可以加前缀来进行区分。比如
class VeryHungryPerson (object):
  def __init__ (self):
    master_chef.addListeners(self, prefix="master")
    backup_chef.addListeners(self, prefix="secondary")
  def _handle_master_SpamFinished (self, event):
    print "Spam is ready!  Smells delicious!"
  def _handle_secondary_SpamFinished (self, event):
    print "Backup spam is ready.  Smells slightly less delicious."
5.事件监听者(一个类)的__init__函数中self.listenTo(产生事件的类)
四、触发事件
一个触发事件的类继承自revent.EventMixin,并在_eventMixin_Events中声明它触发的事件。
1. 类函数定义中调用self.raiseEvent(事件类名("参数"))或者self.raiseEvent(事件类名,"参数"),后者更好一些,因为可以在没有监听者的时候避免创建对象。
2. 能触发事件的类的实例.raiseEvent(事件类名("参数"))或者能触发事件的类的实例.(事件类名,"参数"),同理后者好一些。
五、总体架构(参考  http://richardzhao.me/?p=209 链接里的GoingUpEvent事件是 boot函数调用的core.goUp()函数中触发的。 )
1.定义事件类:class TestEvent (Event):
2.定义触发事件的类
class TestEvent_Generator (EventMixin):
    类里会有类似self.raiseEvent(TestEvent, stuff)的语句。
3.定义监听并处理事件的类:
class TestEvent_Listener (EventMixin):
    类里会有self.listenTo(core.TestEvent_Generator)
   会有_handle_TestEvent (self, event):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值