Hey flexere,
jeg har et custom itemrenderer component med en bindable public var:
1 2 | [Bindable] public var thumbSize:int = 180; |
Og en tilelist:
<mx:TileList id="thumbList" left="200" bottom="0" right="0" top="62" backgroundColor="#141414" borderStyle="none" itemRenderer="components.Thumbnail" dataProvider="{dp}" change="changeHandler(event);" resize="layoutThumbs();" dragEnabled="true" columnWidth="200" rowHeight="200" allowMultipleSelection="true"></mx:TileList>
Det jeg gerne vil er at ændre public var thumbSize fra min main.mxml app, men jeg kan ikke rigtigt finde en måde at kommunikere med min itemrenderer
Hvordan gør man bedst det?
3 kommentarer
Hey SuperMoooosen
Fedt at se du har fået fingerne ned i Flex-kassen - det kommer du ikke til at fortryde.
Når du siger du gerne vil ændre din public var, i din item render, er det så på én bestemt item render eller er det alle dine item render, af samme type?
En måde, der blandt andet er en del af den arkitektur Adobe consultancy praktisere, er ideen om en model locator. - altså en lokation til dine model data.
Uden at vi skal forvinde os ind i det, kan vi bruge samme princip og den smarte databinding funktionalitet til at gøre dit liv lettere.
Forestil dig du har en klasse, vi kalder den GalleryManager. GalleryManager er en singleton, så der kun kan laves ´en af den i hele din applikation. Et sted på GalleryManager er der en public bindable attribut kaldet thumbSize. Når du så, f.eks. i en itemRender har brug for viden om gallery binder den sig f.eke.s til GalleryManager's thumbSize. Når der så sker opdateringer i thumbSize et andet sted fra i appen (husk GalleryManager er singleton, så der findes kun én og dermed opdateres alt på samme objekt i hele appen) kan itemRender få automatisk besked om at der er sket en ændring.
pseudo kode
Lad mig høre hvilket af ovenstående du ikke forstod, så tager vi den fra toppen og ned
Held og lykke med arbejdet
Mener du du har en
public var thumbSizei din itemrenderer?
hvis du byggede det op på følgende måde:
giver outerDocument dig en reference til mxml siden, hvor ovenstående er på.
data refererer til data i din provider så hvis din provider indeholderet array af objekter og hvert objekt har en property kaldet "sti" så får du fat i denne sti med data.sti
Om du kan hive fat i outerDocument fra din actionscript itemRenderer skal jeg dog ikke kunen sige men give it at shot
Husk lige du nok skal ha refresh'et din TileList på en eller anden vis, hvis du ønsker at ændringer fra din main skal afspejles direkte i din TileList.
Tænke tænke tænke...
du kunne ændre rowHeight="" columnWidth="" i din TileList og sætte din itemRenderer til at fylde 100% i højde og bredde. Jeg har lige lavet en simpel test og det virkede fint men jeg ved selvfølgelig ikke om det er det du er ude efter
Hey Asger, det var en ordentlig fin forklaring
Der var en del jeg skal have undersøgt, imidlertid endte det dog med jeg brugte en helt anderledes løsning, så det må blive en anden gang, men tak for det fine svar!
@Sanxion, tak for svaret!