Написание функции внутри атрибута в flex - PullRequest
0 голосов
/ 18 октября 2011

Могу ли я написать функцию внутри атрибута в flex? Примерно так:

<s:Button id="btn" label="text" visible="{foo()}"/>
private function foo():Boolean
{
  //do something
}

Кажется, это не работает, по крайней мере, для меня.
Я знаю, что могу писать как visible="{something == true &amp;&amp; somethingElse == false}" и т. Д. Но мне нужно, чтобы он делал больше как for циклы и т. Д.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Попробуйте это:

[Bindable(event="update")]
private function foo():Boolean
{
   return a && b && c;
}

и, когда a или b или c изменятся, просто сделайте это:

dispatchEven(new Event("update"));
0 голосов
/ 18 октября 2011

Эта реализация не является привязываемой - если результат foo () изменится, он не будет отражен в вашем списке отображения.

Хотя, я думаю, это должно сработать после завершения создания:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955"
               minHeight="600">

    <fx:Script>
        <![CDATA[
            private function foo():Boolean
            {
                return false;
            }
        ]]>
    </fx:Script>

    <s:Button label="text"
              visible="{foo()}" />

</s:Application>

Лучшим подходом было бы включить модель представления, используя привязку, как показано здесь:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955"
               minHeight="600"
               creationComplete="creationCompleteHandler(event)">

    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            [Bindable]
            public var presentationVisible:Boolean = true;

            private var timer:Timer = new Timer(500);

            private function foo():void
            {
                presentationVisible = Math.random() > 0.5 ? true : false;
            }

            protected function creationCompleteHandler(event:FlexEvent):void
            {
                timer.addEventListener(TimerEvent.TIMER, timerHandler);
                timer.start();
            }

            protected function timerHandler(event:TimerEvent):void
            {
                foo();
            }
        ]]>
    </fx:Script>

    <s:Button label="text"
              visible="{presentationVisible}" />

</s:Application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...