<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Li Guoliang &#187; Event</title>
	<atom:link href="http://liguoliang.com/tag/event/feed/" rel="self" type="application/rss+xml" />
	<link>http://liguoliang.com</link>
	<description>ActionScript Flex Java JEE PHP...</description>
	<lastBuildDate>Mon, 21 May 2012 17:04:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Flex Event stopimmediatepropagation VS stoppropagation</title>
		<link>http://liguoliang.com/2011/flex-event-stopimmediatepropagation-vs-stoppropagation/</link>
		<comments>http://liguoliang.com/2011/flex-event-stopimmediatepropagation-vs-stoppropagation/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 09:35:00 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2011/flex-event-stopimmediatepropagation-vs-stoppropagation/</guid>
		<description><![CDATA[What’s the difference ? Here is the test codes:
We will create a button in a Group, and listen the button click event(MouseEvent.Click):
		protected f<p class='read-more'><a href='http://liguoliang.com/2011/flex-event-stopimmediatepropagation-vs-stoppropagation/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>What’s the difference ? Here is the test codes:</p>
<p>We will create a button in a Group, and listen the button click event(MouseEvent.Click):</p>
<pre class="java" name="code">		protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void {
			//  Create button and container
			var hbox:HGroup = new HGroup();
			var button:Button = new Button();
			button.label = "Button";

			// Add Eventer litener
			button.addEventListener(MouseEvent.CLICK, onButtonClick1);
			button.addEventListener(MouseEvent.CLICK, onButtonClick2);
			hbox.addEventListener(MouseEvent.CLICK, onButtonClick3);

			hbox.addElement(button);
			addElement(hbox);
		}

			// Button click handler 1
			private function onButtonClick1(e:MouseEvent):void {
				e.stopImmediatePropagation(); // or e.stopPropagation();
				trace("Handler 1");
			}

			// Button click handler 2
			private function onButtonClick2(e:MouseEvent):void {
				trace("Handler 2");
			}

			// Button click handler 3 listened by hbox
			private function onButtonClick3(e:MouseEvent):void {
				trace("Handler 3");
			}</pre>
<p>Here is the difference:</p>
<p><strong>when use stop propagation in the handler 1st, the trace is:</strong></p>
<p><em>Handler 1<br />
Handler 2</em></p>
<p><strong>but when use stopImmediatePropagation(), the trace is:</strong></p>
<p><em>Handler 1</em></p>
<p>That’s pretty easy to find the differences:</p>
<p>“The <samp>stopImmediatePropagation()</samp> method also prevents the Event objects from moving on to the next node, but it does not allow any other event listeners on the current node to execute.” (<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=events_08.html">Adobe livedocs</a>)</p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2011/flex-event-stopimmediatepropagation-vs-stoppropagation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex 自定义Event 低级错误一例: 未重写Clone方法, 导致类型转换失败</title>
		<link>http://liguoliang.com/2010/custom-event-must-override-clone-method/</link>
		<comments>http://liguoliang.com/2010/custom-event-must-override-clone-method/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 05:59:25 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Custom Event]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2010/custom-event-must-override-clone-method/</guid>
		<description><![CDATA[自定义Event必须及时重写Clone与toString方法....<p class='read-more'><a href='http://liguoliang.com/2010/custom-event-must-override-clone-method/'></a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>在Event监听并转发过程中, 因为没用重写Clone方法, 导致实例被Clone为普通Event实例.</p>
<p>情况是这样的:    <br />自定义Event: EventTest: 继承Event, 增加了一些属性, 重写了toString(), 未重写Clone.</p>
<p>出现问题: 创建EventTest实例后, 多次监听并转发, 在监听, 转发过程中, Event实例对象被Clone, 因为未重写Clone方法, 会通过Event类的Clone方法进行复制, 仅会复制其EventType, 且类型为Event.</p>
<p>形象的说就是: eventTest –&gt; 被监听到, 准发 -&gt;框架Clone eventTest(EventTest类中未重写Clone方法, 于是eventTest被克隆为一个普通Event) –&gt; 再次监听, Event类型不吻合, 报错.</p>
<p>公司代码规范中严格规定了<strong>自定义Event必须及时重写Clone与toString方法</strong>, 写了这么久, 我才领悟到原因. 败了</p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2010/custom-event-must-override-clone-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex中使用currentStateChange事件监听State变化</title>
		<link>http://liguoliang.com/2010/use-currentstatechange-in-flex/</link>
		<comments>http://liguoliang.com/2010/use-currentstatechange-in-flex/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 16:12:15 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[currentStateChange]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[State]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2010/use-currentstatechange-in-flex/</guid>
		<description><![CDATA[使用currentStateChange Event监听State改变事件.<p class='read-more'><a href='http://liguoliang.com/2010/use-currentstatechange-in-flex/'></a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>StateChangeEvent.CURRENT_STATE_CHANGE(currentStateChange):    <br />StateChangeEvent 类代表当组件的 <code>currentState</code> 属性更改时调度的事件。</p>
<p>中文API: <a href="http://www.adobe.com/livedocs/flex/3_cn/mx/events/StateChangeEvent.html">http://www.adobe.com/livedocs/flex/3_cn/mx/events/StateChangeEvent.html</a></p>
<p>使用方法: </p>
<h3>1. ActionScript中监听Event</h3>
<p>ui.addEventListener(StateChangeEvent.CURRENT_STATE_CHANGE, onCurrentStateChange);</p>
<p>注意: 如果用在主程序Application creationComplete的响应方法中, 可能无法监听首个StateChange事件(进入初始State);</p>
<h3>2. MXML中监听Event</h3>
<p>currentStateChange=&quot;onCurrentStateChange(event)&quot;</p>
<p>附录: 响应函数</p>
<pre class="java" name="code">/** On State Change . */
protected function onCurrentStateChange(event:StateChangeEvent):void {
	printLog(&quot;LastState: &quot; + event.oldState + &quot;; currentState&quot; + currentState);
}</pre>
<p>Trace信息:<br />
  <br /><em>LastState: StateEmployeesList; currentStateStateDeptMgt</em></p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2010/use-currentstatechange-in-flex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于FlexBuilder的Event注释</title>
		<link>http://liguoliang.com/2009/%e5%85%b3%e4%ba%8eflexbuilder%e7%9a%84event%e6%b3%a8%e9%87%8a/</link>
		<comments>http://liguoliang.com/2009/%e5%85%b3%e4%ba%8eflexbuilder%e7%9a%84event%e6%b3%a8%e9%87%8a/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 02:28:18 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2009/03/836/</guid>
		<description><![CDATA[如果某个类派发某事件， 我们通常使用如下注释： 
/** * Dispatched when …. * @eventType com.events.MyEvent.EVENT_TEST */    [Event(name=”myEvent” type=”com.events.MyEvent”)] 
<p class='read-more'><a href='http://liguoliang.com/2009/%e5%85%b3%e4%ba%8eflexbuilder%e7%9a%84event%e6%b3%a8%e9%87%8a/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>如果某个类派发某事件， 我们通常使用如下注释： </p>
<p>/** * Dispatched when …. * @eventType com.events.MyEvent.EVENT_TEST */    <br />[Event(name=”myEvent” type=”com.events.MyEvent”)] </p>
<p>&#160;</p>
<p>在使用new testr().addEvent…时提示的Const是错误的.MyEvent.MY_EVENT </p>
<p>解决方法: </p>
<p>[Event(<strong>name=”eventTest” </strong>type=”com.events.myevent”)]     <br />此时的提醒为MyEvent.EVENT_TEST    <br /> []中的name应与Event中的const的名字 如EVENT_TEST:String = &quot;myEvent&quot;; 中的EVENT_TEST对应 ,&#8217;_&quot;后的字母保留大写去掉下划线-&gt;eventTest即可.</p>
<p>&#160;</p>
<p>注意: Flex框架中的事件， 其Const 与String的name都是想对应的.</p>
<p>==&gt;不得不承认 这样子比较挫&lt;==</p>
<p>所以在编写自定义事件时, 最好也遵守这个不成文的规定:</p>
<p>public static const EVENT_EO_EDITOR:String = &quot;eventEoEditor&quot;;</p>
<p>而不是随便乱写一个String, 这样便于在其他派发该事件的类中编写事件注释.</p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2009/%e5%85%b3%e4%ba%8eflexbuilder%e7%9a%84event%e6%b3%a8%e9%87%8a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex中addEventListener失败原因总结</title>
		<link>http://liguoliang.com/2008/flex%e4%b8%adaddeventlistener%e5%a4%b1%e8%b4%a5%e5%8e%9f%e5%9b%a0%e6%80%bb%e7%bb%93/</link>
		<comments>http://liguoliang.com/2008/flex%e4%b8%adaddeventlistener%e5%a4%b1%e8%b4%a5%e5%8e%9f%e5%9b%a0%e6%80%bb%e7%bb%93/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 18:01:07 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2008/10/165/</guid>
		<description><![CDATA[我绝对是个粗心大意的人, 写代码90%的时间是浪费在低级错误上. 今天不幸又add错一把, 索性将犯错原因归纳如下:
1.弱智级别:*****  隔着锅台上炕:  没有dispatch就addEventListener
2.弱智级别:****   驴唇不对马嘴:  addEventListener中<p class='read-more'><a href='http://liguoliang.com/2008/flex%e4%b8%adaddeventlistener%e5%a4%b1%e8%b4%a5%e5%8e%9f%e5%9b%a0%e6%80%bb%e7%bb%93/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<p>我绝对是个粗心大意的人, 写代码90%的时间是浪费在低级错误上. 今天不幸又add错一把, 索性将犯错原因归纳如下:</p>
<p>1.弱智级别:*****  隔着锅台上炕:  没有dispatch就addEventListener</p>
<p>2.弱智级别:****   驴唇不对马嘴:  addEventListener中Event类型不符<br />
3.弱智级别:***    驴唇不对马嘴:   Listener参数中Event类型不符[FleBuilder会在编译时报错]<br />
4.弱智级别**      脑子让驴踢了:   在addEventListener之前就dispatch Event[不太容易发现]</p>
<p>自定义事件常见错误:</p>
<p>1.  Type不使用Const的String</p>
<p>2. 构造函数中super(type&#8230;)中type填写错误.</p>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2008/flex%e4%b8%adaddeventlistener%e5%a4%b1%e8%b4%a5%e5%8e%9f%e5%9b%a0%e6%80%bb%e7%bb%93/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex中Event与Bindable</title>
		<link>http://liguoliang.com/2008/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0event%e4%b8%8ebindable/</link>
		<comments>http://liguoliang.com/2008/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0event%e4%b8%8ebindable/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 13:28:25 +0000</pubDate>
		<dc:creator>Guoliang</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Bindable]]></category>
		<category><![CDATA[Event]]></category>

		<guid isPermaLink="false">http://liguoliang.com/2008/09/104/</guid>
		<description><![CDATA[<blockquote><p>[小站博客均为原创, 转载请保留以下信息:</p>
<p>作者:<a id="r_l_1" href="../" target="_blank">http://liguoliang.com</a> 欢迎访问:Adobe上海用户组: <a id="r_l_2" href="http://riashanghai.com/" target="_blank">http://riashanghai.com </a>]</p></blockquote>
<h2>Event:</h2>
<p>1.事件派发 Dispatching</p>
<p>Flash.events.EventDispacher类提供了事件dispatch函数,如果需要dispatch事件,则应该考虑继承该类或其子类.如果不能继承该类,则应事先IEventDispatcher接口</p>
<p>2.监听事件 Listening to Events</p>
<p>在监听事件时应首先考虑是否要使用weak referenced.如果事件监听与派发与监听函数有共同的生命周期,则可以使用strong referenced,在其他的大部分情况下,则应使用weak referenced.<br />
需要注意的是, 如果事件派发者属性为Public, 则在任何允许的地方都可以增加监听函数, 从而达到低内聚, 更易于操作.</p>
<p></p><p class='read-more'><a href='http://liguoliang.com/2008/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0event%e4%b8%8ebindable/'>More...</a></p><p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></description>
			<content:encoded><![CDATA[<blockquote><p>[小站博客均为原创, 转载请保留以下信息:</p>
<p>作者:<a id="r_l_1" href="../" target="_blank">http://liguoliang.com</a> 欢迎访问:Adobe上海用户组: <a id="r_l_2" href="http://riashanghai.com/" target="_blank">http://riashanghai.com </a>]</p></blockquote>
<h2>Event:</h2>
<p>1.事件派发 Dispatching</p>
<p>Flash.events.EventDispacher类提供了事件dispatch函数,如果需要dispatch事件,则应该考虑继承该类或其子类.如果不能继承该类,则应事先IEventDispatcher接口</p>
<p>2.监听事件 Listening to Events</p>
<p>在监听事件时应首先考虑是否要使用weak referenced.如果事件监听与派发与监听函数有共同的生命周期,则可以使用strong referenced,在其他的大部分情况下,则应使用weak referenced.<br />
需要注意的是, 如果事件派发者属性为Public, 则在任何允许的地方都可以增加监听函数, 从而达到低内聚, 更易于操作.</p>
<p><span id="more-104"></span></p>
<h2>Bindable的三种实现方式:</h2>
<p>1.使用Event实现.</p>
<p>2.MXML中使用大括号实现.</p>
<p>3.AS中使用ChangeWatcher实现.</p>
<p>Event与Bindable举例:</p>
<p><a href="http://liguoliang.com/wp-content/uploads/2008/09/image.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://liguoliang.com/wp-content/uploads/2008/09/image-thumb.png" border="0" alt="image" width="244" height="91" /></a></p>
<p>有一个Person类:</p>
<pre class="java" name="code">package com.insprise
{
import flash.events.Event;
import flash.events.EventDispatcher;
import mx.events.PropertyChangeEvent; </code>

public class Person extends EventDispatcher
{
private var _name:String;
private var _age:int;
private var _desc:String;
/**
* 构造函数
*/
public function Person()
{
super();
}
/**
* Get&amp;Set Name SetName时dispatch一个PropertyChangeEvent事件
*/
[Bindable(event="propertyChange")]
public function get name():String {
trace("Get name: " + _name);
return _name;
}
public function set name(name_:String):void {
if(name_ == _name) {
return;
}
var old:String = this._name;
this._name = name_;
trace("Set Name to: " + name_);
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,"name",old,name_));
}
/**
* Get&amp;Set age; age被Set的时候会dispatch一个ageChanged事件.
*/
[Bindable(event="ageChanged")]
public function get age():int {
trace("Get age: " + _age);
return _age;
}
public function set age(age_:int):void {
if(age_ == _age) {
return;
}
var old:int = this._age;
this._age = age_;
trace("Set Age to: " + age_);
dispatchEvent(new Event("ageChanged"));

}
/**
* Get&amp;Set Desc;desc被set时会自动dispatch一个PropertyChangeEvent.
*/
[Bindable]
public function get desc():String {
trace("Get desc: " + _desc);
return _desc;
}
public function set desc(desc_:String):void {
if(desc_ == _desc) {
return;
}
var old:String = this._desc;
this._desc = desc_;
trace("Set desc to: " + desc_);
}
}
}
</pre>
<p>现在我们通过上面提到的三种方式实现Bindable:</p>
<h2>1.使用Event Bindable:</h2>
<pre class="java" name="code">
import mx.events.PropertyChangeEvent;
import com.insprise.Person;
var person:Person = new Person();
/**
* 监听PropertyChangeEvent与ageChanged事件
*/
private function init():void {
person.addEventListener("propertyChange",propertyChangeHandler);
person.addEventListener("ageChanged",ageChangedHandler);
}

/**
* 通过对PropertyChangeEvent.property判断是name还是desc被监听,更新屏幕
*/
private function propertyChangeHandler(e:PropertyChangeEvent):void {
if(e.property == "name") {
textArea_Name.text = e.newValue.toString();
}else if(e.property == "desc") {
textArea_Desc.text = e.newValue.toString();
}else {
return;
}
trace("view: " + e.property + " Changed");
}

/**
* set age之后更新屏幕
*/
private function ageChangedHandler(e:Event):void {
textArea_Age.text = String(person.age);
}
</pre>
<h2>2.MXML使用大括号:</h2>
<h2>3.使用AS中的ChangeWatcher</h2>
<pre class="java" name="code">private function init():void {

    var nameWatcher:ChangeWatcher;

    var ageWatcher:ChangeWatcher;

    var descWatcher:ChangeWatcher;

    var canWatche:ChangeWatcher;

    //nameWatcher = BindingUtils.bindProperty(textArea_Name,"text",person,"name");

    ChangeWatcher.watch(person,"name",nameSetter);

    ageWatcher = BindingUtils.bindProperty(textArea_Age,"text",person,String("age"));

    descWatcher = BindingUtils.bindProperty(textArea_Desc,"text",person,"desc",true);

}

private function nameSetter(e:PropertyChangeEvent):void {

    if(e==null) {

        return;

    }

    textArea_Name.text = e.newValue.toString();

    trace("Name Changed by nameSetter on the Event " + e + " to " + e.newValue);

} 

private function ageSetter(e:Event):void {

    //textArea_Age.text = String(person.age);

    trace("Age is setted by ageSetter on the Event " + " to " + person.age);

}</pre>
<p><p>

----------Post from: <a href="http://liguoliang.com">@LiGuoliang.com, 欢迎回来~</a>----------</p></p>
]]></content:encoded>
			<wfw:commentRss>http://liguoliang.com/2008/%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0event%e4%b8%8ebindable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

