views:

1323

answers:

2

Does anyone know why when using BindingUtils on the selectedItem property of a ComboBox you get the following warning? Any ideas how to resolve the issue?

The binding still works properly, but it would be nice to get rid of the warning.

warning: multiple describeType entries for 'selectedItem' on type 'mx.controls::ComboBox':
<accessor name="selectedItem" access="readwrite" type="Object" declaredBy="mx.controls::ComboBase">
<metadata name="Bindable">
<arg key="" value="valueCommit"/>
</metadata>
...

Thanks,

Matt

A: 

Here is the code. It is basicly a copy of BindingUtils.bindProperty that is setup for a ComboBox so that both the combo box and the model are updated when either of the two change.

public static function bindProperty2(site:Object, prop:String, host:Object, chain:Object, commitOnly:Boolean = false):ChangeWatcher
{
    var cbx:ComboBox = null;
    if ( site is ComboBox ) { cbx = ComboBox(site); }
    if ( host is ComboBox ) { cbx = ComboBox(host); }
    var labelField:String = "listID";

    var w:ChangeWatcher = ChangeWatcher.watch(host, chain, null, commitOnly);

    if (w != null)
    {
     var func:Function;

     if ( site is ComboBox )
     {
      func = function(event:*):void
      {
       var dp:ICollectionView = ICollectionView(site.dataProvider);
       var selItem:Object = null;

       for ( var i:int=0; i<dp.length; i++ )
       {
        var obj:Object = dp[i];
        if ( obj.hasOwnProperty(labelField) )
        {
         var val:String = String(obj[labelField]);
         if ( val == w.getValue() )
         {
          selItem = obj;
          break;
         }
        }
       }

       site.selectedItem = selItem;
      };

      w.setHandler(func);
      func(null);
     }
     else
     {
      func = function(event:*):void
      {
       var value:Object = w.getValue();
       if ( value == null )
       {
        site[prop] = null;
       }
       else
       {
        site[prop] = String(w.getValue()[labelField]);
       }
      };
      w.setHandler(func);
      func(null);
     }
    }

    return w;
}
maclema
this doesn't appear to be an answer to the question
thenduks
+1  A: 

It would be better to override the property in question and declare it final.