2012-03-16 51 views
1

使用它在我主要使用火花部件我的Flex 4.6的web應用程序,但也有一個MX-部件 - 一個PopUpButton通過我擴展(源代碼是下面)。擴展檢測PopUpButton和在Flex 4 web應用

用戶報告與該按鈕的問題,但我不能複製任何 - 因爲周。

我試着更換MX:連接到它菜單S:列表,但它並沒有改變任何東西。我懷疑有一個「空指針異常」或其他故障,說明測試自己,當我不打......

我的問題是:爲什麼Flash Builder的報告警告我的自定義按鈕,就好像它方法將是私人的還是不存在的?

enter image description here

可有人請找出原因?

我主要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> 
+0

我將你的代碼複製到一個新的項目中,並沒有得到警告。我認爲您發佈的代碼沒有任何問題。你有沒有嘗試刪除你的應用程序的塊,直到警告消失?它可以幫助您追蹤問題的實際位置。 – 2012-03-16 21:30:00

+1

這也可能是警告是虛假的 - 在項目上做了一個「乾淨的」之後,我已經有很多奇怪的事情消失了。 – 2012-03-16 21:32:03

回答

1

不要擔心Flash Builder中的警告,它也有分析定製困難MX擴展代碼(有時甚至是火花!)。 如果運行正常,在乾淨或FB重新啓動後警告最終會消失。

您也可以嘗試使用Spark組件的組合,取決於功能重現相同的功能,它也許是做的最好的事情。

儘管放心,我貼你的代碼在我的Flash Builder中(並刪除了PrefEvent),還有我所有的電腦:)

對於你的用戶報告錯誤上沒有警告,你應該給我們更多所以我們可以嘗試幫助。

乾杯

+0

謝謝,很高興從其他Flash Builder用戶那裏獲得一些信息 – 2012-03-17 00:21:33