[1227] | 1 | <?xml version="1.0" encoding="utf-8"?>
|
---|
| 2 | <!-- ValueComboBox.mxml
|
---|
| 3 | allows value property to be settable
|
---|
| 4 | based on "Rich Internet Applications with Adobe Flex and Java" page 319
|
---|
| 5 | -->
|
---|
| 6 |
|
---|
| 7 | <mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml">
|
---|
| 8 | <mx:Script>
|
---|
| 9 | <![CDATA[
|
---|
| 10 | public var dataField: String = "data";
|
---|
| 11 |
|
---|
| 12 | private var candidateValue: Object;
|
---|
| 13 | private var valueDirty: Boolean = false;
|
---|
| 14 | private var candidateDataProvider: Object;
|
---|
| 15 | private var dataProviderDirty: Boolean = false;
|
---|
| 16 |
|
---|
| 17 | [Bindable("change")]
|
---|
| 18 | [Bindable("valueCommit")]
|
---|
| 19 | [Inspectable(defaultValue="0", category="General", verbose="1")]
|
---|
| 20 | override public function get value():Object
|
---|
| 21 | {
|
---|
| 22 | var item: Object = selectedItem;
|
---|
| 23 | if ((item == null) || (typeof(item) != "object")) return item;
|
---|
| 24 | return item[dataField] ? item[dataField] : item.label;
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | public function set value(val:Object) : void
|
---|
| 28 | {
|
---|
| 29 | candidateValue = val;
|
---|
| 30 | valueDirty = true;
|
---|
| 31 | invalidateProperties();
|
---|
| 32 | }
|
---|
| 33 |
|
---|
| 34 | private function applyValue(val:Object):void
|
---|
| 35 | {
|
---|
| 36 | if ((val != null) && (dataProvider != null)) {
|
---|
| 37 | for (var i : int = 0; i < dataProvider.length; i++) {
|
---|
| 38 | if (dataProvider[i] == null) continue;
|
---|
| 39 |
|
---|
| 40 | // only checking dataField to avoid accidental selection
|
---|
| 41 | // (could also check labelField, but not needed for ED app)
|
---|
| 42 | if (val == dataProvider[i][dataField]) {
|
---|
| 43 | selectedIndex = i;
|
---|
| 44 | return;
|
---|
| 45 | }
|
---|
| 46 | }
|
---|
| 47 | }
|
---|
| 48 | selectedIndex = -1;
|
---|
| 49 | }
|
---|
| 50 |
|
---|
| 51 | override public function set dataProvider(value:Object):void
|
---|
| 52 | {
|
---|
| 53 | candidateDataProvider = value;
|
---|
| 54 | dataProviderDirty = true;
|
---|
| 55 | invalidateProperties();
|
---|
| 56 | }
|
---|
| 57 |
|
---|
| 58 | override protected function commitProperties():void
|
---|
| 59 | {
|
---|
| 60 | super.commitProperties();
|
---|
| 61 |
|
---|
| 62 | if (dataProviderDirty) {
|
---|
| 63 | super.dataProvider = candidateDataProvider;
|
---|
| 64 | dataProviderDirty = false;
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | if (valueDirty) {
|
---|
| 68 | applyValue(candidateValue);
|
---|
| 69 | valueDirty = false;
|
---|
| 70 | }
|
---|
| 71 | }
|
---|
| 72 | ]]>
|
---|
| 73 | </mx:Script>
|
---|
| 74 | </mx:ComboBox>
|
---|