1

在我的 Flex 4.6 Web 应用程序中,我主要使用 spark 组件,但也有一个 mx-component - 我扩展的PopUpButton(源代码如下)。

用户报告了该按钮的问题,但我无法重现任何问题 - 自数周以来。

我尝试用s:List替换附加的mx:Menu ,但它没有改变任何东西。我怀疑有一个“空指针异常”或其他一些失败,我在测试自己时没有遇到......

我的问题是:为什么 Flash Builder 会报告有关我的自定义按钮的警告,就好像它的方法是私有的或不存在一样?

在此处输入图像描述

有人可以找出原因吗?

我的主要App.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application  
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    xmlns:comps="*">

    <fx:Script>
        <![CDATA[
                   _auxBtn.update(obj.aux);
                    ......
                   _auxBtn.disable();
        ]]>
    </fx:Script>

    <comps:AuxButton id="_auxBtn" enabled.normal="false" enabled.ingame="false" aux="handleAux(event)" />

我的自定义按钮AuxButton.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:PopUpButton
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    popUp="{_list}"
    initialize="init(event)">

    <fx:Metadata> 
        [Event(name="aux", type="PrefEvent")] 
    </fx:Metadata>

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.events.FlexEvent;
            import mx.utils.ObjectUtil;
            import spark.components.List;

            private const EXACT:String = 'Своя игра';
            private const REVEAL:String = 'Показать';

            private var _str:String;

            [Bindable]
            private var _data:ArrayCollection = new ArrayCollection();

            [Bindable]
            private var _list:List = new List();

            private function init(event:FlexEvent):void {
                _list.dataProvider = _data;
                _list.addEventListener('click', handleList);
                addEventListener('click', handleClick);
            }

            public function update(aux:Array):void {
                var found:Boolean;

                // nothing has changed
                if (ObjectUtil.compare(_data.source, aux, 0) == 0)
                    return;

                if (aux == null || aux.length == 0) {
                    disable();
                    return;
                }

                _data.removeAll();
                for each (var obj:Object in aux) {
                    _data.addItem(obj);

                    if (!_str) {
                        if (EXACT == obj['label']) {
                            _str  = obj['event'];
                            label = obj['label'];
                            found = true;
                        } else if (REVEAL == obj['label']) {
                            _str  = obj['event'];
                            label = obj['label'];
                            found = true;
                        }
                    } else if (_str == obj['event']) {
                            found = true;
                    }
                }

                if (!found) {
                    _str  = _data[0].event;
                    label = _data[0].label;
                }

                enabled = true;
            }

            private function handleList(event:MouseEvent):void {
                var index:int = _list.selectedIndex;
                if (index >= 0 && index < _data.length) {
                    _str  = _data[index].event;
                    label = _data[index].label;
                }
                close();
            }           

            private function handleClick(event:MouseEvent):void {
                dispatchEvent(new PrefEvent(PrefEvent.AUX, _str));
                disable();
            }

            public function disable():void {
                _data.removeAll();
                enabled = false;
                _str    = null;
                label   = '';
            }
        ]]>
    </fx:Script>
</mx:PopUpButton>
4

1 回答 1

1

不必担心 Flash Builder 警告,有时它会难以分析自定义 mx 扩展代码(有时甚至会产生火花!)。如果它运行它没关系,警告最终会在干净或 FB 重新启动后消失。

您也可以尝试使用混合 spark 组件来重现相同的功能,根据功能,这可能是最好的选择。

请放心,我将您的代码粘贴到我的 Flash Builder 中(并删除了PrefEvent),我的计算机上根本没有任何警告 :)

对于您的用户报告的错误,您应该向我们提供更多详细信息,以便我们尝试提供帮助。

干杯

于 2012-03-16T21:27:33.107 回答