Я могу связать свойство компонента Flex с функцией?

var output = myJSON;  //from succss:function(myJSON)
  var html = '';
  $.each(output,function(key,value){
      html +='<tr>';
      html +='<td>'+ value.name + '</td>';
      html +='<td>'+ value.mobile + '</td>';
      html +='<td>'+ value.id + '</td>';
      html +='</tr>';
  });
$('.append_data tbody').append(html);
7
задан SkunkSpinner 15 January 2009 в 01:18
поделиться

4 ответа

<mx:Button
enabled = "{this.myFunction(this.myVariable)}"
>

или встроенный:

<mx:Button
enabled = "{(function(arg:Object):Boolean{ ... })(this.myVariable)}"
>
7
ответ дан 6 December 2019 в 10:03
поделиться

Согласно документам Flex, пока свойство связываемо, можно просто сделать это (я включал две дополнительных кнопки для демонстрации):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:Script>
        <![CDATA[

            [Bindable]
            private var currentUser:String = "Bill";

            private function isUserAllowed(user:String):Boolean
            {
                if (user == "Bill")
                {
                    return true;
                }

                return false;
            }

        ]]>
    </mx:Script>

    <mx:VBox>
        <mx:Button label="My Button" enabled="{isUserAllowed(currentUser)}" />
        <mx:HBox>
            <mx:Button label="Try Tom" click="{currentUser = 'Tom'}" />
            <mx:Button label="Try Bill" click="{currentUser = 'Bill'}" />
        </mx:HBox>
    </mx:VBox>

</mx:Application>

Без currentUser, отмеченного [Связываемый], тем не менее, это не будет работать.

Другой способ пойти, если бы Вы хотели связать более буквально с функцией (это также выражается в документах), состоял бы в том, чтобы иметь функцию, отвечают на событие, которое Вы диспетчеризируете, когда текущий пользователь изменяется, как так:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">

    <mx:Script>
        <![CDATA[

            private var _currentUser:String = "Bill";

            public function set currentUser(value:String):void
            {
                if (_currentUser != value)
                {
                    _currentUser = value;
                    dispatchEvent(new Event("userChanged"));
                }
            }           

            [Bindable(event="userChanged")]
            private function isUserEnabled():Boolean
            {
                if (_currentUser == "Bill")
                {
                    return true;
                }

                return false;
            }

        ]]>
    </mx:Script>

    <mx:VBox>
        <mx:Button label="My Button" enabled="{isUserEnabled()}" />
        <mx:HBox>
            <mx:Button label="Try Tom" click="{currentUser = 'Tom'}" />
            <mx:Button label="Try Bill" click="{currentUser = 'Bill'}" />
        </mx:HBox>
    </mx:VBox>

</mx:Application>

Таким образом, существует несколько путей. IMO, второе кажется так или иначе более надлежащим, но нет определенно ничего неправильно с первым.Удачи!

10
ответ дан 6 December 2019 в 10:03
поделиться

Вот то, что я сделал несколько раз при подобных обстоятельствах:

<mx:Script>
<![CDATA[

    [Bindable] var _username : String;

    private function isUserAllowed (userName:Boolean):Boolean {
        if (userName == 'Tom')
            return true;
        if (userName == 'Bill')
            return false;
    }

]]>
</mx:Script>

<mx:Button label="Create PO"
    id="createPOButton"
    enabled="{isUserAllowed(_username)}"
    click="createPOButton_Click()" />

Таким образом, когда Связываемое _username изменения, это запустит уведомление об изменении. Так как маркировка слушает _username изменения (даже если это - просто параметр к другой функции), enabled свойство будет переоценено.

2
ответ дан 6 December 2019 в 10:03
поделиться
<mx:Script>
    <![CDATA[
        [Bindable]
        private var userName : String = "Tom"; // or whatever ...
        [Bindable]
        private var userAllowed : Boolean;

        private function isUserAllowed ():Boolean {
           if (userName == 'Tom')
             return false;
           if (userName == 'Bill')
              return false;
           return false;
        }
    ]]>
</mx:Script>

    <mx:Button label="Create PO" id="createPOButton" enabled="{userAllowed}" addedToStage="isUserAllowed()"/>
0
ответ дан 6 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: