Como chegar Flex 3 ComboBox largura para ajustar com base no conteúdo dataProvider encadernados ter mudado?
-
07-07-2019 - |
Pergunta
No Flex 3, criei uma caixa de combinação dentro de um MXML componente semelhante ao seguinte:
<mx:ComboBox id="comboBox" dataProvider="{_choices}" />
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
// etc...
public function get choices():ArrayCollection { return _choices; }
[Bindable]
private var _choices:ArrayCollection =
new ArrayCollection( [ { data: "ALL", label: "All" } ] );
// etc...
]]>
</mx:Script>
</mx:HBox>
Na aplicação MXML pai, eu estou modificando o conteúdo da propriedade opções:
myComponentId.choices.removeAll();
myComponentId.choices.addItem({data: "NY", label: "New York"});
myComponentId.choices.addItem({data: "CA", label: "California"});
// etc...
A ligação é trabalhando em que a caixa de combinação é automaticamente pegar os novos conteúdos adicionados em tempo de execução, no entanto Não é ajustar sua largura. A largura inicial da caixa de combinação é grande o suficiente apenas para mostrar o item inicial "All" declarou no componente. No entanto, eu quero e teria esperado a caixa de combinação para re-size automaticamente durante a ligação a ser capaz de mostrar "California", mas não é.
Como posso obter a caixa de combinação para atualizar sua largura depois de eu ter adicionado novas ampla rótulos para seu dataProvider? Obrigado!
Solução
Você provavelmente só precisa chamar invalidateProperties()
, invalidateDisplayList()
, invalidateSize()
, ou alguma combinação dos três (eu sou algo de um novato Flex eu), para forçar uma atualização para medições do componente depois de alterar o provedor de dados ou seu conteúdo.
myComponentId.invalidateSize();
myComponentId.invalidateDisplayList();
myComponentId.invalidateProperties();
Outras dicas
Eu gostaria de acrescentar um setter para choices
e chamada validateNow()
na caixa de combinação no final do setter:
public function set choices(value:ArrayCollection):void
{
_choices = value;
comboBox.validateNow();
}
Eu encontrei o mesmo problema e nenhuma delas funcionou para mim. Eu consegui resolver isso criando um novo manipulador de eventos
menuComboBox.addEventListener(ResizeEvent.RESIZE, updateListWidth);
O método chamado neste evento simplesmente redimensiona a propriedade dropdown.width.
private function updateListWidth(event:ResizeEvent):void {
menuComboBox.dropdown.width = menuComboBox.width;
}