使用它在我主要使用火花部件我的Flex 4.6的web應用程序,但也有一個MX-部件 - 一個PopUpButton通過我擴展(源代碼是下面)。擴展檢測PopUpButton和在Flex 4 web應用
用戶報告與該按鈕的問題,但我不能複製任何 - 因爲周。
我試着更換MX:連接到它菜單由S:列表,但它並沒有改變任何東西。我懷疑有一個「空指針異常」或其他故障,說明測試自己,當我不打......
我的問題是:爲什麼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>
我將你的代碼複製到一個新的項目中,並沒有得到警告。我認爲您發佈的代碼沒有任何問題。你有沒有嘗試刪除你的應用程序的塊,直到警告消失?它可以幫助您追蹤問題的實際位置。 – 2012-03-16 21:30:00
這也可能是警告是虛假的 - 在項目上做了一個「乾淨的」之後,我已經有很多奇怪的事情消失了。 – 2012-03-16 21:32:03