magento事件(event)的dispatchEvent(分发)和catchEvent(获取)
当你需要扩展Magento的核心的功能时有两个选择:
(1)重写(override)Magento的core classes
(2)使用Magento的event-driven 机制
由于你只能重写一次Magento的core classes(如果你需要在多个module中重写相同core class就会出现错误),所以使用Magento的Event就大显神威了,它使得你的工作简易方便。
Magento的event-driven机制中有两个非常重要的概念:
(1)分发(dispatch)一个事件(event)
(2)捕捉(catch)一个事件(event)
Dispatching events
Magento中你需要调用 Mage::dispatchEvent(...) 就可以Dispatch一个Event, 例:
Mage::dispatchEvent('custom_event', array('object'=>$this));
该方法有两个参数,一个是事件的标识符(在所有事件中唯一)和一个关联数组。该数组的键值是一个data(Varien_Event_Observer 的一个实例),这个data将被执行事件的函数(即observer)进行处理并返回结果。
Catching events
捕捉事件比分发复杂一些,你必须使用一个已有的module或者新建一个module.这里新建一个,目录结构如下:
在该目录的config.xml文件中,我们新定义一个event observer,下面是参考示例(当然你可以定义不同scope的event observer):

上面的xml的配置有一个要注意的地方,就是<type />标签里的值可以是model,object,singleton,其中model和object是等效的且它们都将使用Mage::getModel(....)方法来进行初始化;而singleton将使用Mage::getSingleton(....)来初始化。此外,在Observer.php中就是相关的observer类的定义,该类既不需要继承其他类也不需要继承其他接口。这需要在customObserverAction方法的参数中传入Varien_Event_Observer类的一个实例,正是这个实例对象把dispatcher和event handler联系到一起。同时该实例对象也是继承于Varient_Object,所以拥有getter魔术方法,例:

magento事件(event)的dispatchEvent(分发)和catchEvent(获取)的更多相关文章
- 事件 event
添加移除函数(removeEventListener)时三个参数保持一致,否则会失败,而且不会有错误提示 var btn = document.getElementById(“myBtn”); btn ...
- (92)Wangdao.com_第二十五天_线程机制_H5 Web Workers 分线程任务_事件 Event
浏览器内核 支撑浏览器运行的最核心的程序 IE 浏览器内核 Trident内核,也是俗称的IE内核Chrome 浏览器内核 统称为 Chromium 内核或 ...
- C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较
使用Task,await,async,异步执行事件(event),不阻塞UI线程和不跨线程执行UI更新 使用Task,await,async 的异步模式 去执行事件(event) 解决不阻塞UI线程和 ...
- 自定义事件的触发dispatchEvent
1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: documen ...
- (转)js原生自定义事件的触发dispatchEvent
1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: 1 2 3 d ...
- 自定义事件 Event 、CustomEvent的使用
通过Event和dispathEvents触发自定义事件 <span id="btn">获取</span> <script> var event ...
- 转 js自定义事件——Event和CustomEvent
之前在学习自定义事件时,在MDN的Event.initEvent()页面顶端有写:该特性已从Web标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性. 作 ...
- nginx&http 第二章 ngx 事件event处理 数据结构
ngx_event.c :这个文件主要放置Nginx事件event模块的核心代码. 包含:进程事件分发器(ngx_process_events_and_timers).事件模块的模块和配置.模块初始化 ...
- 事件EVENT与waitforsingleobject的使用
事件event与waitforsingleobject的配合使用,能够解决很多同步问题,也可以在数据达到某个状态时启动另一个线程的执行,如报警. event的几个函数: 1.CreateEvent和O ...
随机推荐
- 提额 APP
提额 APP 开始参与这个APP也是巧合,一个月之前,我还在忙于电信运营商的工作,上级就过来问我在之前公司有没有用过 html css js这些.在维库的时候,可是从前台到后台都是要全包的呀,因为项目 ...
- python之sys模块详解
python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...
- PAT A 1018. Public Bike Management (30)【最短路径】
https://www.patest.cn/contests/pat-a-practise/1018 先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路 ...
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...
- Android驱动开发5-8章读书笔记
Android驱动开发读书笔记 第五章 S5PV210是一款32位处理器,具有 ...
- winform用户控件、动态创建添加控件、timer控件、控件联动
用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...
- eclipse快捷键积累(持续更新)
大小写转换:Ctrl+Shift+X;Ctrl+Shift+Y; 打开资源:Ctrl+Shift+R; 打开类型:Ctrl+Shift+T; 调试时查看对象.变量:Ctrl+Shift+I; 打开函数 ...
- 分享一下自己用c++写的小地图
http://www.unrealchina.com/forum.php?mod=viewthread&tid=451&extra=&from=portal&page= ...
- 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- 解决Win8无法升级.NET Framework 3.5.1 提示错误0x800F0906
搞了好久,发现了这篇文,很清晰,就引用了过来.http://www.xdowns.com/article/239/Article_3065.html 起因是windows8.1装oracle10g提示 ...