Now it works (not sure if dispathEvent needed though and why):
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"
verticalScrollPolicy="off" horizontalScrollPolicy="off"
implements="mx.controls.menuClasses.IMenuItemRenderer"
width="100%" height="100%">
<mx:Script>
<![CDATA[
import mx.events.*;
import mx.controls.*;
[Bindable]
private var color:uint;
override public function set data(value:Object):void {
if(value != null) {
super.data = value;
lb.text = String(value.label);
color = (lb.text.indexOf('♥') != -1 ||
lb.text.indexOf('♦') != -1) ? 0xFF0000 : 0x000000;
}
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
// implement IMenuItemRenderer interface
private var _menu:Menu;
public function get menu():Menu { return _menu; }
public function set menu(value:Menu):void { _menu = value; }
public function get measuredBranchIconWidth():Number { return 100;}
public function get measuredTypeIconWidth ():Number { return 100;}
public function get measuredIconWidth ():Number { return 100;}
]]>
</mx:Script>
<mx:Label id="lb" color="{color}" />
</mx:Canvas>