Astraport
19.11.2012, 13:39
Очень странно ведет себя этот компонент. Например, есть у меня контейнер где раскладываются карты. Нужно чтобы по тапу (клику) на карту появлялся колаут с описанием и чтобы стрелка указывала на эту карту. При этом колаут можно закрыть по клику кнопки внутри его и по клику на другую карту, но при этом он должен открыться в новой позиции. Код ниже.
<fx:Declarations>
<s:Callout id="callout" resize="calloutResize(event)" width="100%">
<s:BorderContainer backgroundColor="#C5CCD4" color="0x000000" borderWeight="2" width="100%" height="100%" cornerRadius="5">
<s:layout>
<s:VerticalLayout paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" gap="5" horizontalAlign="center" />
</s:layout>
<s:Label id="calloutTitle" fontWeight="bold" textAlign="center"/>
<s:Label id="calloutText" textAlign="center" />
<s:Button click="callout.close();" label="OK"/>
</s:BorderContainer>
</s:Callout>
</fx:Declarations>
//слушатель по клику на карту
protected function showInfo(event:MouseEvent):void
{
var card:Card = event.currentTarget as Card;
if (callout.isOpen){
callout.close();
}
callout.open(card, false);
calloutTitle.text = 'Позиция ' + (card.name).slice(8);
calloutText.text= stripHTML(card.desc);
}
Получается, что если кликнуть по правой карте, то первое открытие колаута может произойти как на картинке - то есть он не влезает в экран. При этом, если закрыть колаут и кликнуть по этой же карте опять, то новое позиционирование будет правильным. Но закрывать нужно только через кнопку, тап на других картах приводит тоже к неправильному позиционированию. Вторая странность - при тапе на другие карты должно происходить закрытие с анимацией, но этого не происходит и иногда не происходит смещение колаута. В общем совершенно непредсказуемое поведение. Пробовал разные валидации - толком ничего не помогает.
<fx:Declarations>
<s:Callout id="callout" resize="calloutResize(event)" width="100%">
<s:BorderContainer backgroundColor="#C5CCD4" color="0x000000" borderWeight="2" width="100%" height="100%" cornerRadius="5">
<s:layout>
<s:VerticalLayout paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10" gap="5" horizontalAlign="center" />
</s:layout>
<s:Label id="calloutTitle" fontWeight="bold" textAlign="center"/>
<s:Label id="calloutText" textAlign="center" />
<s:Button click="callout.close();" label="OK"/>
</s:BorderContainer>
</s:Callout>
</fx:Declarations>
//слушатель по клику на карту
protected function showInfo(event:MouseEvent):void
{
var card:Card = event.currentTarget as Card;
if (callout.isOpen){
callout.close();
}
callout.open(card, false);
calloutTitle.text = 'Позиция ' + (card.name).slice(8);
calloutText.text= stripHTML(card.desc);
}
Получается, что если кликнуть по правой карте, то первое открытие колаута может произойти как на картинке - то есть он не влезает в экран. При этом, если закрыть колаут и кликнуть по этой же карте опять, то новое позиционирование будет правильным. Но закрывать нужно только через кнопку, тап на других картах приводит тоже к неправильному позиционированию. Вторая странность - при тапе на другие карты должно происходить закрытие с анимацией, но этого не происходит и иногда не происходит смещение колаута. В общем совершенно непредсказуемое поведение. Пробовал разные валидации - толком ничего не помогает.