Как избавиться от предупреждения «множественные записи descriptionType»? - PullRequest
7 голосов
/ 08 августа 2008

Кто-нибудь знает, почему при использовании BindingUtils для свойства selectedItem ComboBox вы получаете следующее предупреждение? Есть идеи, как решить проблему?

Привязка по-прежнему работает правильно, но было бы неплохо избавиться от предупреждения.

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>

Ответы [ 2 ]

1 голос
/ 18 декабря 2008

Было бы лучше переопределить указанное свойство и объявить его окончательным.

0 голосов
/ 18 августа 2008

Вот код. В основном это копия BindingUtils.bindProperty, которая настроена для ComboBox, так что поле со списком и модель обновляются при изменении любого из двух.

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;
}
...