代码之家  ›  专栏  ›  技术社区  ›  Matt MacLean

如何消除“多个describeType条目”警告?

  •  7
  • Matt MacLean  · 技术社区  · 16 年前

    有人知道为什么在组合框的selectedItem属性上使用BindingUtils时会得到以下警告?有什么办法解决这个问题吗?

    绑定仍然正常工作,但是最好去掉警告。

    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 回复  |  直到 11 年前
        1
  •  1
  •   my name my name    16 年前

    最好重写有问题的属性并将其声明为最终属性。

        2
  •  0
  •   Matt MacLean    16 年前

    这是密码。它基本上是BindingUtils.bindProperty这是一个组合框的设置,这样当组合框和模型中的任何一个发生变化时,组合框和模型都会更新。

    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;
    }
    
    推荐文章