PDA

Volledige versie bekijken : [BUG][Flex 2] TileList component


TheDutch
%Europe/Berlin %908 %2006, 21:48
Er zit een bug in de Flex 2 TileList component wanneer de property "allowMultipleSelection" op TRUE staat. De volgende stappen moet je volgen om het probleem te repliceren:

1. Zet een standaard TileList component op je stage en zet de property "allowMultipleSelection" op TRUE.
2. Vul de TileList met genoeg data zodat er een verticale scrollbar verschijnt.
3. Scroll een stuk naar beneden en selecteer dan meerdere items met de SHIFT toets.
4. Je zult zien dat de selectie niet klopt en hij totaal wat anders selecteert dan jij hebt aangegeven.

Ik heb de bug gevonden in de source code van de TileList component van Flex 2 en heb deze opgelost. Deze bug en fix heb ik aan Adobe doorgegeven. Ze waren er erg blij mee en hebben mijn bericht direct geforward naar een tweetal programmeurs van het Flex 2 SDK Engineering team om het op te lossen. Waarschijnlijk is dit probleem dus opgelost bij de volgende update van de Flex 2 SDK.

In de tussentijd kan je gebruikmaken van mijn FixedTileList component die ik als bijlage heb toegevoegd aan dit bericht :).

Erwin

BernardV
%Europe/Berlin %011 %2006, 00:17
Dank je!
Was het probleem nog niet tegengekomen, maar het kan me veel frustrerende uren schelen :D

TheDutch
%Europe/Berlin %320 %2006, 07:41
Frustrerende uren? Best wel ja! Vooral wanneer je een eigen fixed component moet gaan schrijven waar de bug uit is gehaald.

De TileList class zit zo in elkaar: TileList >> TileBase >> ListBase >> etc. De bug zat werkelijk in de ListBase class maar de code waar de fout in zit is in de huidige opzet alleen maar van toepassing op de TileList class.

De ListBase class bestaat uit ruim 7.000 regels code. Niet echt eenvoudig om snel het probleem in te vinden. Uiteindelijk na wat gezocht te hebben op "shift" en "allowMultipleSelection" en na flink wat potentiele methods te hebben overriden om vervolgens het één en ander te alerten, vond ik de method waar het probleem in zat. Na nog wat alerts was het ook duidelijk om welke regelcode het ging en wat het probleem was. Dit was nog steeds het makkelijkste gedeelte.

Nu moest ik TileList gaan extenden om mijn eigen fixed component te gaan maken. Je copy/paste die method in je nieuwe fixed class, past hem aan, en override hem. Echter zitten er in die method veel verwijzingen naar private variable, private methods, of protected en public methods waarin weer verwezen wordt naar private variable of methods, die hij dus niet kan vinden in mijn fixed class. Die moest ik dus ook allemaal gaan copy/pasten. Je kent het, de ene method verwacht weer andere methods en die andere methods verwachten ook weer methods, etc. Al met al veel uitzoekwerk want veel errors kwamen niet naar voren tijdens het compilen en hielden zich stil tijdens runtime. Bepaalde functionaliteiten zoals dubbelklik, selection reset, en drag/drop toepassingen deden het daardoor niet meer zonder dat duidelijk was wat er ontbrak.

Gelukkig uiteindelijk na in totaal 8 uur (2 uur bug zoeken en oplossen, 6 uur fixed component maken) alles opgelost en een mooie FixedTileList component voor gebruik :).

Waldo
%Europe/Berlin %590 %2006, 14:10
Wel gelogd bij Adobe mag ik hopen? ;)

TheDutch
%Europe/Berlin %627 %2006, 15:03
Lees mijn eerste bericht eens volledig ;).

Waldo
%Europe/Berlin %859 %2006, 20:37
Oeps, had alleen 2e post goed gelezen ;) Thanks!