Try this will help you.
Instead of getting label text from selectedItems get value
attribute value like @value. So now become <colorData chosenColors='1, 3'/>
.
public function get colors():String {
var values:Array = [];
for(var i:int=0;i < colorList.selectedItems.length; i++){
values.push(colorList.selectedItems[i].@value.toString()); //Note here
}
return values.toString();
}
1, 3 also display in grid as well. I 'm not sure what you expect at UI level. Still if you want display Color like Green, Red in UI level but at the same time you need to store value their respective node. In case create one more attribute in XML like
<colorData chosenColors='Green, Red' chosenValueColors='1,3' />.
Here chosenColors for display purpose and chosenValueColors for might database or do for other things. Now you can expected value from attribute chosenValueColors from XML.
Based on comments
To acheive you requirement you need to override data getter/setter
method in itemRenderer or you can use dataChange Event.
override public function get data():Object
{
return super.data;
}
override public function set data(value:Object):void
{
super.data = value;
if(!value)
return;
var selectedValues:Array = value.@chosenColors.toString().split(","); //get selected value in array
var selectedIndices:Vector.<int> = new Vector.<int>();
for (var i:int = 0, len:int = colorList.dataProvider.length; i < len; i++)
{
var color:XML = colorList.dataProvider[i] as XML;
if(selectedValues.indexOf(color.@value.toString()) > -1)
selectedIndices.push(i); //Store index of selected items
}
trace(selectedIndices.toString());
colorList.selectedIndices = selectedIndices;
}
public function get colors():String {
var values:Array = [];
for(var i:int=0;i < colorList.selectedItems.length; i++){
values.push(colorList.selectedItems[i].@value.toString());
}
return values.toString();
}
public function colorList_changeHandler(event:IndexChangeEvent):void
{
data.@value = colors; //IMPORT Commit the selected value to dataProvider.
}
Note here we listen change event for commit value into dataprovider like change="colorList_changeHandler(event)"
<r:CheckList id="colorList" change="colorList_changeHandler(event)"
dataProvider="{parentApplication.colors}"
labelField="@label" width="100%" height="150"/>