а чем тобой приведенный не устраивает?
вот он же, но с хранением id в name

Код AS3:
public class Main extends Sprite
{
public function Main():void
{
for (var i:int = 0; i < 10; i++)
{
var s:Sprite = new Sprite();
s.graphics.beginFill(0x000000);
s.graphics.drawRect(0, 0, 20, 20);
s.x = 30 * i;
s.name = i.toString();
addChild(s);
}
addEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(evnt:MouseEvent):void
{
var s:Sprite = evnt.target as Sprite;
if (s)
{
var id:String = s.name;
trace( "id : " + id );
}
}
}
вот почти такой же, но с хранением данных не в самих объектах, а в Dictionary:

Код AS3:
public class Main extends Sprite
{
private var _dict:Dictionary = new Dictionary();
public function Main():void
{
for (var i:int = 0; i < 10; i++)
{
var s:Sprite = new Sprite();
s.graphics.beginFill(0x000000);
s.graphics.drawRect(0, 0, 20, 20);
s.x = 30 * i;
addChild(s);
_dict[s] = i;
}
addEventListener(MouseEvent.CLICK, clickHandler);
}
private function clickHandler(evnt:MouseEvent):void
{
var id:*= _dict[evnt.target];
trace( "id : " + id );
}
}
суть обоих в том, что любое событие несет target, по которому достаем нужные данные, из самого объекта или еще откуда - это уже по обстоятельствам..