Какое событие запускается, когда все SkinSparts доступны в SkinnableComponent? - PullRequest
0 голосов
/ 12 февраля 2011

Я (медленно) изучаю Flex 4 и работаю над созданием скинов для пользовательского компонента, расширяющего SkinnableComponent. Компонент полностью в ActionScript и по сути выглядит так:

package components
{
    import spark.components.supportClasses.SkinnableComponent

    [SkinState("normal")]
    [SkinState("over")] 
    [SkinState("selected")]     
    public class AccountSummary extends SkinnableComponent
    {
        [Bindable]
        public var itemIndex:int = 0;

        [Bindable]
        public var accountName:String = "";

        [Bindable]
        public var accountNumber:String = "";   

        [Bindable]
        public var currentBalance:String = "";  

        [SkinPart(required="true")]
        public var lblAccountName:Label;

        [SkinPart(required="true")]
        public var lblCurrentBalance:Label;

        [SkinPart(required="true")]
        public var lblAccountNumber:Label;

        [SkinPart(required="true")]
        public var lblLastUpdated:Label;

        public function AccountSummary()
        {
            super();

            lblAccountName.text = accountName;
            lblCurrentBalance.text = currentBalance;
            lblAccountNumber.text = "Acc: " + accountNumber;
            lblLastUpdated.text = "Last Updated: "; 
        }

        override protected function getCurrentSkinState():String
        {
            return "normal";
        }
    }
}

У меня проблема с NULL REFERENCES в конструкторе для различных SkinParts, потому что они еще не созданы. Я пытаюсь выяснить, когда лучше всего обращаться к ним, чтобы назначить их значения .text. Я знаю, что могу переопределить partAdded () и добавить значение .text при добавлении каждой части, но я бы предпочел просто прослушать какое-то волшебное событие, которое отправляется, когда они все доступны.

Я не уверен, имеет ли это значение, но переменные accountName, accountNumber назначаются с помощью повторителя с dataProvider на хост-компоненте. Я не уверен, имеет ли это отношение к тому, когда данные становятся доступны компоненту AccountSummary - от которого, возможно, также придется ждать. Мне удалось успешно использовать FlexEvent.CREATION_COMPLETE для назначения всех моих значений .text для SkinParts, но является ли это правильным событием / наилучшей практикой? Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 12 февраля 2011

Вам нужно прочитать о Flex 4 Component LifeCycle , в частности, о создании компонентов .Ничто не будет создано во время выполнения конструктора.Значения, на которые вы ссылаетесь (accountName, lblCurrentBalance и т. Д.) Также не будут перемещены за пределы состояний по умолчанию.

Вы хотите установить значения по умолчанию в методе partAdded ().Перепишите ваш код конструктора примерно так:

    public function AccountSummary()
    {
        super();

    }

override protected function partAdded(partName : String, instance: Object):void{
 super.partAdded(partName, instance);
 if(instance == lblAccountName){
            lblAccountName.text = accountName;
 else if(instance == lblCurrentBalance){

 } else if (instance == lblCurrentBalance){
   lblCurrentBalance.text = currentBalance;
 } else if (instance == lblAccountNumber){
  lblAccountNumber.text = "Acc: " + accountNumber;
 } else if (instance == lblLastUpdated){
  lblLastUpdated.text = "Last Updated: "; 
 }

}

Если вы новый программист, вы можете посвятить некоторое время изучению некоторых основных концепций программирования.Это Руководство по ActionScript 3 может помочь вам начать работу.Если у вас есть опыт работы с другими языками, но вы новичок во Flex, я настоятельно рекомендую потратить пару дней на чтение full flex документации , чтобы помочь вам разобраться в этом.

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