try this:
package com.adobe.ac
{
import mx.events.CollectionEvent;
import mx.collections.ArrayCollection;
import flash.events.Event;
import mx.core.Application;
import mx.core.UIComponent;
/**
*
* monitors Collections and react on reassining of the variable
* and changes in the collection which are bindable
*
*/
public class ObserveCollection extends Observer
{
private var _handler : Function;
private var _source : Object;
override public function get handler() : Function
{
return _handler;
}
public function set handler( value : Function ) : void
{
_handler = value;
if( value != null )
{
isHandlerInitialized = true;
if( isHandlerInitialized && isSourceInitialized
)
{
callHandler();
}
}
}
override public function get source() : Object
{
return _source;
}
public function set source( value : Object ) : void
{
if (_source != null){
_source.removeEventListener(CollectionEvent.COLLECTION_CHANGE,collectionChangeHandler);
}
_source = value;
_source.addEventListener(CollectionEvent.COLLECTION_CHANGE,collectionChangeHandler);
isSourceInitialized = true;
if( isHandlerInitialized && isSourceInitialized )
{
callHandler();
}
}
protected override function callHandler() : void
{
try
{
handler.call( null, source );
}
catch( e : Error )
{
delay( e );
}
}
protected override function delay( e : Error ) : void
{
UIComponent( Application.application ).callLater(
throwException, [
e ] );
}
private function throwException( e : Error ) : void
{
throw e;
}
private function collectionChangeHandler (event:Event) : void
{
callHandler();
}
}
}
cheers,
Dennis
--- In [email protected], "Alex Harui" <[EMAIL PROTECTED]> wrote:
>
> Never used Observe, but if it implements IMXMLObject or you subclass and
> do so, then you can use it in MXML
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of Richard Rodseth
> Sent: Wednesday, August 13, 2008 4:16 PM
> To: [email protected]
> Subject: [flexcoders] Observing collections
>
>
>
> For some reason I have an aversion to adding event listeners in
> ActionScript, favouring binding expressions and the Observe tag from
> Adobe Consulting. Not sure how rational this is, but there you have it.
> Binding is just so damn elegant.
>
> However, collections are a problem. It seems that so often you want to
> update something if either the collection itself or its contents
> changes, and you don't really care about the details of the change.
>
> I suppose if you're a DataGrid watching its dataprovider you do care and
> can minimize updates, but in many of the use cases I've encountered,
> that's not the case - my observer is going to do something with the
> whole collection (or maybe I've just been lazy about exploiting possible
> optimizations).
>
> Is there anything like the Observe tag that can be instantiated in MXML
> and can trigger a function call on a COLLECTION_CHANGE event?
>