簡體   English   中英

如何將Flex Combobox中的預設值作為選定項處理

[英]How to handle pre-set value in Flex Combobox as selected item

我的Flex程序面臨一個非常基本但令人討厭的問題。

長話短說,我有一個DataGrid,在每行中(您已經可以動態地添加和刪除行),都有一個基於ArrayCollection元素的Combobox( responsabili ),對Combobox的每次更改都已存儲了對db的更改。 。 我希望組合框顯示從數據庫加載的值作為選定值。

<s:Panel title="qqq" width="100%" height="100%" styleName="light">
    <s:layout>
        <s:VerticalLayout paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" />
    </s:layout>
    <s:VGroup width="100%" height="100%">
        <mx:Text text="www" />
        <components:GraphicButton styleName="add" toolTip="Aggiungi elemento" id="aggCompito" click="aggCompito_clickHandler(event)"/>
        <s:DataGrid width="100%" height="100%" dataProvider="{MyModel.instance.compiti}" editable="true" gridItemEditorSessionSave="changeHandler(event)">
            <s:columns>
                <s:ArrayList>
                    <s:GridColumn headerText="Responsabile" editable="false" width="180">
                        <s:itemRenderer>
                            <fx:Component>
                                <s:GridItemRenderer>
                                    <fx:Script>
                                        <![CDATA[
                                        import it.aaa.frontend.model.MyModel;

                                        import mx.binding.utils.ChangeWatcher;
                                        import mx.collections.ArrayCollection;
                                        import mx.controls.Alert;
                                        import mx.core.FlexGlobals;
                                        import mx.events.CloseEvent;
                                        import mx.events.IndexChangedEvent;

                                        import spark.events.IndexChangeEvent;

                                        protected function changeHandler(event:IndexChangeEvent):void {
                                            data.responsabile = myResponsabile.selectedItem;
                                            // TODO Auto-generated method stub
                                            data.tipo = event.newIndex;
                                            dispatchEvent(new Event("compitiChange", true));
                                        }

                                        protected function responsabililabelFunc(item:Object):String {
                                            return String(item.cognome) + " " + String(item.nome);
                                        }

                                        protected function guessSelectedItem(item:Object):int {
                                            return item.responsabile.id;
                                        }

                                        ]]>
                                    </fx:Script>
                                    <s:HGroup>
                                        <s:ComboBox id="myResponsabile"
                                                    dataProvider="{MyModel.instance.responsabili}"
                                                    change="changeHandler(event)"
                                                    labelFunction="responsabililabelFunc"
                                                    selectedItem="{data.responsabile}"
                                                />
                                    </s:HGroup>
                                </s:GridItemRenderer>
                            </fx:Component>
                        </s:itemRenderer>
                    </s:GridColumn>
                </s:ArrayList>
            </s:columns>
        </s:DataGrid>
    </s:VGroup>
</s:Panel>

我的模型

public var responsabili:ArrayCollection; //initialized with actual ArrayCollection of "responsabili", with id, cognome, nome.

如果您將某些動作腳本類用作數據對象,並且將resposabile屬性標記為可綁定,則它僅適用於selectedItem =“ {data.responsabile}”。

[Bindable] public var responsabile:Object;

如果只有一些通用對象作為數據,則需要在itemrenderer中設置數據的地方趕上它。 因此,您的GridItemRenderer需要另一種方法:

override public function set data(value:Object):void
{
    super.data = value;

    // only do something if the data is set. When the renderer is destroyed the data will be null
    if (data)
    {
       myResponsabile.selectedItem = data.responsabile;
    }
}

我不記得是在創建所有組件(包括組合框)之后還是在此之前設置數據。 因此,如果由於myResponsabile此時為null而導致出現空指針異常的情況,它將變得更加復雜:

private var _myResponsabile:Object;
private var _myResponsabileChanged:Boolean;

override public function set data(value:Object):void
{
    super.data = value;

    // only do something if the data is set. When the renderer is destroyed the data will be null
    if (data)
    {
       _myResponsabile = data.responsabile;
       _myResponsabileChanged = true;
       invalidateProperties();
    }
}

override protected function commitProperties():void
{
    super.commitProperties();

    if(_myResponsabileChanged)
    {
        _myResponsabileChanged = false;
        myResponsabile.selectedItem = _myResponsabile;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM