Най-добра практика за дефиниране и актуализиране на MXML компонент в приложението Flex

Стойностите на компонентите на Flex се инициализират чрез метод init. В поток на приложение, Как да обновя стойността на данните на mxml компонент; тъй като init се извиква само при самото стартиране.

Пример за mxml компонент може да бъде толкова прост като етикет на бутон или текст, толкова сложен като ретранслатор, чийто доставчик на данни е уеб услуга (означава, че трябва да се направи нова заявка за изтегляне на данните и обновяване на доставчика на данни на ретранслатор)


person Community    schedule 12.08.2009    source източник
comment
Моля, дайте пример за типа данни, които искате да опресните.   -  person cliff.meyers    schedule 13.08.2009


Отговори (4)


Ако доставчикът на данни е колекция или масив, той ще се актуализира сам, когато елементите се добавят или изтриват от колекцията. Можете да слушате събитието CollectionEvent.CollectionChange, за да видите кога дадена колекция се променя.

Но не съм много сигурен какво имаш предвид? За обвързване ли сте?

person Jon    schedule 12.08.2009
comment
Масивите не задействат събития при вътрешни промени, напр. когато даден артикул е натиснат върху него и по този начин вашето твърдение е неправилно. ArrayCollection обаче задейства събития и трябва да се използва точно както казвате. - person Marcus Stade; 13.08.2009

Ако искате да стартирате отново цялата контрола, можете да създадете събитие "reset" и манипулаторът за нулиране да изпълни същото поведение като кода за стартиране.

Това е най-доброто, което мога да направя без повече подробности...

person Aaron Saunders    schedule 12.08.2009
comment
може да ми предостави код на шаблон, компонент за повторител на mxml или който и да е компонент. това би изяснило идеята - person ; 13.08.2009

трябва да създадете сами сетери и гетери за свойствата, които искате да промените, и след това е необходимо опресняване. например:

private var _tmp : String = '';
public function set tmp(val : String) : void {
      this._tmp = val;
      this.doOtherDataRefreshNeeded();
}
public function get tmp() : String {
      return this._tmp;
}

и по този начин, всеки път, когато кодът, който използва този компонент и трябва да актуализира своето tmp свойство. сетерът ще бъде извикан и там могат да се случат много други неща освен присвояването на стойността.

за прости mxml компоненти като текстове и входове, използвайте свързвания {} за техните стойности на данни. те трябва да се актуализират веднага щом данните се променят. ако не, извикайте метода .invalidateNow() върху тях, за да принудите актуализацията.

person TheBrain    schedule 13.08.2009
comment
Това всъщност не са най-добрите практики. Сетерът може да бъде извикан десет, сто или дори хиляди пъти по време на един кадър, което би означавало извършването на множество ненужни изчисления. Най-добрите практики са да извикате един от методите за обезсилване (евентуално invalidateProperties) и след това по време на фазата на ангажиране (commitProperties) да извършите действителната работа, свързана с опресняването. Това гарантира, че въпреки че методът за обезсилване може да бъде извикан многократно по време на един кадър, действителната работа се изпълнява само веднъж. - person Marcus Stade; 13.08.2009
comment
Мисля, че invalidateProperties е начинът по подразбиране за по-добър контрол върху компонентите на потребителския интерфейс - person ; 25.08.2009

използвайте метода ValidateNow() в компонента mxml в метода за актуализиране

person user1847180    schedule 28.03.2013