我有一個包含Google Map,Area Chart和一個包含列表的手風琴的應用程序。當列表中的選擇發生變化時,應用程序將從服務器獲取數據並更新圖表和地圖,重新定位地圖以在其視口中包含所有標記,並啓動SeriesEffect以動畫圖表數據重繪。Flex Spark ItemRenderer標籤在大幅重繪時消失
當用戶更改所選內容並在地圖和圖表重繪時繼續將鼠標懸停在列表中的項目上時,項目渲染器上的標籤消失。
的項目渲染器的代碼如下:
<s:ItemRenderer xmlns:fx = "http://ns.adobe.com/mxml/2009"
xmlns:s = "library://ns.adobe.com/flex/spark"
xmlns:mx = "library://ns.adobe.com/flex/mx"
autoDrawBackground = "false"
xmlns:components = "com.ibenergy.components.*">
<s:layout>
<s:BasicLayout>
</s:BasicLayout>
</s:layout>
<s:states>
<s:State name = "hovered" />
<s:State name = "selected" />
<s:State name = "normal" />
</s:states>
<fx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.states.OverrideBase;
import spark.components.DataGroup;
import valueObjects.DateRange_type;
import valueObjects.Utilities_type;
private var _data : Object;
private var _dataLabel : String;
[Bindable("dataChanged")]
override public function get data() : Object {
return _data;
}
override public function set data (value : Object) : void {
_data = value;
if (value is String) {
dataLabel = String (value);
} else if (value is Utilities_type) {
dataLabel = Utilities_type (value).Name;
} else if (value is DateRange_type) {
dataLabel = DateRange_type (value).QueryName;
}
dispatchEvent (new Event ("dataChanged"));
}
[Bindable]
public function get dataLabel() : String {
return _dataLabel;
}
public function set dataLabel (value : String) : void {
_dataLabel = value;
}
]]>
</fx:Script>
<!-- layer 2: fill -->
<!--- @private -->
<s:Rect id = "fill"
left = "1"
top = "1"
width = "24"
height = "24"
radiusX = "2">
<s:fill>
<s:LinearGradient rotation = "90">
<s:GradientEntry color = "0x3F3F40" color.selected = "0x999999" alpha = "1.00" ratio = "0.00" />
<s:GradientEntry color = "0x999999" color.selected = "0x72A94A" alpha = "1.00" ratio = "1.00" />
</s:LinearGradient>
</s:fill>
</s:Rect>
<!-- layer 4: fill highlight -->
<!--- @private -->
<s:Rect id = "highlight"
left = "1"
top = "1"
width = "24"
height = "24"
radiusX = "2">
<s:fill>
<s:LinearGradient rotation = "90">
<s:GradientEntry color = "0x3F3F40"
ratio = "0.0"
alpha = "1.0"
alpha.selected = "0.22"
alpha.hovered = "0.22" />
<s:GradientEntry color = "0xBBBDBF" ratio = "0.125" alpha = "1.0" />
<s:GradientEntry color = "0xFFFFFF" ratio = "0.25" alpha = "0" />
</s:LinearGradient>
</s:fill>
</s:Rect>
<!-- layer 5: highlight stroke (all states except down) -->
<!--- @private -->
<s:Rect id = "highlightStroke"
left = "1"
top = "1"
width = "24"
height = "24"
radiusX = "2"
excludeFrom = "selected">
<s:stroke>
<s:LinearGradientStroke rotation = "90" weight = "1">
<s:GradientEntry color = "0x3F3F40" alpha = "1.0" />
<s:GradientEntry color = "0xBBBDBF" alpha = "1.0" />
</s:LinearGradientStroke>
</s:stroke>
</s:Rect>
<!-- layer 7: border - put on top of the fill so it doesn't disappear when scale is less than 1 -->
<!--- @private -->
<s:Rect id = "border"
left = "0"
right = "0"
top = "0"
bottom = "0"
width = "69"
height = "20"
radiusX = "2">
<s:stroke>
<s:LinearGradientStroke rotation = "90" weight = "1">
<s:GradientEntry color = "0x000000" alpha = "0.00" />
<s:GradientEntry color = "0x000000" alpha = "0.00" />
</s:LinearGradientStroke>
</s:stroke>
</s:Rect>
<!-- layer 8: text -->
<!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay -->
<!-- font-weight:bold;
font-size:8;
color:#000000;-->
<components:ItemRendererLabel id = "labelDisplay"
renderingMode = "cff"
textAlign = "left"
left = "29"
verticalAlign = "middle"
right = "2"
top = "2"
bottom = "2"
text = "{ dataLabel }"
includeIn = "hovered,normal,selected">
</components:ItemRendererLabel>
它是使用下面的CSS樣式:
@font-face {
src: url("com/ibenergy/fonts/Myriad/MyriadWebPro.ttf") ;
fontFamily: MyriadHalo;
embed-as-cff:false;
font-weight:normal;
font-style:normal;
unicodeRange:
U+0041-U+005A, /* Upper-Case [A..Z] */
U+0061-U+007A, /* Lower-Case a-z */
U+0030-U+003F, /* Numbers [0..9] */
U+0020-U+002F, /* Space + Punctuation [ !"#$%&'()*+,- ] */
U+003A-U+0040, /* Special Chars [ :;<=>[email protected] ] */
U+005B-U+0060, /* Special Chars [ [\]^_` ] */
U+007B-U+007E, /* Special Chars [ {|}~ ] */
U+00A3-U+00A3, /* British Pound Symbol */
U+00A9-U+00A9, /* Copyright Symbol */
U+00AE-U+00AE, /* Registered Symbol */
U+00B0-U+00B0, /* Degrees Symbol */
U+00BC-U+00BE, /* Fractions Symbols */
U+00A1-U+00A1, /* Latin Character: ¡ */
U+00BF-U+00BF, /* Latin Character: ¿ */
U+00C0-U+00FF, /* Latin Characters */
U+2013-U+2014, /* EN Dash, EM Dash */
U+2018-U+2019, /* Directional Single Quotes */
U+201C-U+201D, /* Directional Double Quotes */
U+2022-U+2023, /* Bullets */
U+2120-U+2120, /* SM */
U+2122-U+2122; /* Trade mark (TM) */
}
@font-face {
src: url("com/ibenergy/fonts/Myriad/MyriadWebPro-Bold.ttf") ;
fontFamily: MyriadHalo;
embed-as-cff:false;
fontWeight: bold;
font-style:normal;
unicodeRange:
U+0041-U+005A, /* Upper-Case [A..Z] */
U+0061-U+007A, /* Lower-Case a-z */
U+0030-U+003F, /* Numbers [0..9] */
U+0020-U+002F, /* Space + Punctuation [ !"#$%&'()*+,- ] */
U+003A-U+0040, /* Special Chars [ :;<=>[email protected] ] */
U+005B-U+0060, /* Special Chars [ [\]^_` ] */
U+007B-U+007E, /* Special Chars [ {|}~ ] */
U+00A3-U+00A3, /* British Pound Symbol */
U+00A9-U+00A9, /* Copyright Symbol */
U+00AE-U+00AE, /* Registered Symbol */
U+00B0-U+00B0, /* Degrees Symbol */
U+00BC-U+00BE, /* Fractions Symbols */
U+00A1-U+00A1, /* Latin Character: ¡ */
U+00BF-U+00BF, /* Latin Character: ¿ */
U+00C0-U+00FF, /* Latin Characters */
U+2013-U+2014, /* EN Dash, EM Dash */
U+2018-U+2019, /* Directional Single Quotes */
U+201C-U+201D, /* Directional Double Quotes */
U+2022-U+2023, /* Bullets */
U+2120-U+2120, /* SM */
U+2122-U+2122; /* Trade mark (TM) */
}
@font-face {
src: url("com/ibenergy/fonts/Myriad/MyriadPro-It.otf") ;
fontFamily: MyriadHalo;
embed-as-cff:false;
fontStyle: italic;
fontWeight: normal;
unicodeRange:
U+0041-U+005A, /* Upper-Case [A..Z] */
U+0061-U+007A, /* Lower-Case a-z */
U+0030-U+003F, /* Numbers [0..9] */
U+0020-U+002F, /* Space + Punctuation [ !"#$%&'()*+,- ] */
U+003A-U+0040, /* Special Chars [ :;<=>[email protected] ] */
U+005B-U+0060, /* Special Chars [ [\]^_` ] */
U+007B-U+007E, /* Special Chars [ {|}~ ] */
U+00A3-U+00A3, /* British Pound Symbol */
U+00A9-U+00A9, /* Copyright Symbol */
U+00AE-U+00AE, /* Registered Symbol */
U+00B0-U+00B0, /* Degrees Symbol */
U+00BC-U+00BE, /* Fractions Symbols */
U+00A1-U+00A1, /* Latin Character: ¡ */
U+00BF-U+00BF, /* Latin Character: ¿ */
U+00C0-U+00FF, /* Latin Characters */
U+2013-U+2014, /* EN Dash, EM Dash */
U+2018-U+2019, /* Directional Single Quotes */
U+201C-U+201D, /* Directional Double Quotes */
U+2022-U+2023, /* Bullets */
U+2120-U+2120, /* SM */
U+2122-U+2122; /* Trade mark (TM) */
}
@font-face {
src: url("com/ibenergy/fonts/Myriad/MyriadPro-BoldIt.otf") ;
fontFamily: MyriadHalo;
fontStyle: italic;
embed-as-cff:false;
fontWeight: bold;
unicodeRange:
U+0041-U+005A, /* Upper-Case [A..Z] */
U+0061-U+007A, /* Lower-Case a-z */
U+0030-U+003F, /* Numbers [0..9] */
U+0020-U+002F, /* Space + Punctuation [ !"#$%&'()*+,- ] */
U+003A-U+0040, /* Special Chars [ :;<=>[email protected] ] */
U+005B-U+0060, /* Special Chars [ [\]^_` ] */
U+007B-U+007E, /* Special Chars [ {|}~ ] */
U+00A3-U+00A3, /* British Pound Symbol */
U+00A9-U+00A9, /* Copyright Symbol */
U+00AE-U+00AE, /* Registered Symbol */
U+00B0-U+00B0, /* Degrees Symbol */
U+00BC-U+00BE, /* Fractions Symbols */
U+00A1-U+00A1, /* Latin Character: ¡ */
U+00BF-U+00BF, /* Latin Character: ¿ */
U+00C0-U+00FF, /* Latin Characters */
U+2013-U+2014, /* EN Dash, EM Dash */
U+2018-U+2019, /* Directional Single Quotes */
U+201C-U+201D, /* Directional Double Quotes */
U+2022-U+2023, /* Bullets */
U+2120-U+2120, /* SM */
U+2122-U+2122; /* Trade mark (TM) */
}
controls|PrecisionOptionRenderer{
font-family:MyriadHalo;
rendering-mode:normal;
}
controls|PrecisionOptionRenderer:normal,
controls|PrecisionOptionRenderer:hovered,
controls|PrecisionOptionRenderer:selected{
font-weight:bold;
font-size:8;
color:#000000;
}
預期的行爲是,標籤應始終呈現。
我試過在dataChange
上使用validateNow()
;刪除css中的所有狀態並僅使用css中的組件類型選擇器;將樣式直接放在ItemRenderer中的Label
;使用Flex框架ToggleButton
和ChangeWatcher
更新Label.text
的dataChange
;覆蓋setStyle()
以確保沒有undefined
值正在傳遞到樣式屬性,getCurrentRendererState()
以確保狀態集是我已經覆蓋的狀態,並且updateDisplayList()
嘗試在更新時設置Label
顏色。
即使完成所有重繪,Label
仍會消失並保持丟失狀態。選擇和取消選擇項目時,填充會正確更改。有沒有人遇到這個問題和/或任何人都可以想出一個我還沒有嘗試過的解決方法?
在此先感謝...
馬克西姆,我試過這兩個。都沒有工作。感謝您的幫助。 – 2011-04-18 15:14:53
嘗試添加'removedFromStage'偵聽器來標記並在其中放置斷點。你會知道誰刪除了你的標籤。 – 2011-04-23 05:41:21