Sorry, link should have been http://www.ubeek.com/Flex/testrend.txt
--- In flexcoders@yahoogroups.com, "postwick" <p...@...> wrote: > > OK, thanks to the below example, I have made some progress on setting up > my first custom itemRenderer. Code can be viewed here: > http://www.ubeek.com/Flex/testrend.mxml > > As I mentioned before, my goal is to display a list of Staff. One of > the fields (moduleAccess) in the Staff record is a list of integers > (i.e. "1,3,17,25"). I have a table that contains a list of modules > (SEQ, MODULENAME). For each Staff displayed by the List's itemRenderer, > I need to loop through all the modules and output a checkbox...and if > the module's SEQ is in the Staff's moduleAccess list then the box should > be checked. > > I tried setting up a remoteObject inside the custom renderer, but no > matter where I put it it gave me a parse error. I guess it doesn't like > mx:RemoteObject inside a component. So I put it outside the component, > but then the script function inside the component didn't seem able to > access the RemoteObject's data. Although it was what I initially tried > to do (with the RO inside the component) I don't really want to do that > as it seems highly inefficient to query the database for every Staff > record. It seems I should be able to execute the RO just once and then > pass the resulting list of modules to the component so I can loop > through it to output all the checkboxes (and for each record check the > SEQ against the Staff's moduleAccess, which I know how to do). > > So the question is - how do call the RO just once and pass the result > into the component (as an ArrayCollection or something) so I can loop > over it repeatedly instead of actually calling it and hitting the > database repeatedly? > > Thanks, > Paul > > > --- In flexcoders@yahoogroups.com, "valdhor" <valdhorlists@> wrote: > > > > As a quick and dirty... > > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > layout="vertical" > > xmlns:custom="Components.*"> > > <mx:Script> > > <![CDATA[ > > import mx.collections.ArrayCollection; > > > > [Bindable] private var staffArrColl:ArrayCollection; > > ]]> > > </mx:Script> > > <mx:Repeater id="myStaff" dataProvider="{staffArrColl}"> > > <custom:CheckBoxComponent id="checkBoxs" > > person="{Person(myStaff.currentItem)}" /> > > </mx:Repeater> > > </mx:Application> > > > > CheckBoxComponent.mxml: > > <?xml version="1.0" encoding="utf-8"?> > > <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" > > creationComplete="onCreationComplete()"> > > <mx:Script> > > <![CDATA[ > > import ValueObjects.Person; > > > > public var person:Person; > > > > private function onCreationComplete():void > > { > > // From person object make a remote object call to > get > > Modules and Queues > > // When remote object calls return, create checkboxes > > appropriately > > } > > ]]> > > </mx:Script> > > </mx:VBox> > > > > Person.as: > > package ValueObjects > > { > > [RemoteClass(alias="Classes.Testing.Person")] > > [Bindable] > > public class Person > > { > > //instance variables > > private var _name:String; > > private var _id:String; > > > > //accessor methods > > public function get name():String {return _name;} > > public function get id():String {return _id;} > > > > //mutator methods > > public function set name(name:String):void {_name = name;} > > public function set id(id:String):void {_id = id;} > > } // end class > > }//end package > > > > I have not included any remote object calls or result handlers. I'll > > leave that up to you. > > > > Keep in mind that Flex is object oriented. One of the ideas behind OOP > > is encapsulation. If you can encapsulate all the properties and > methods > > of something and then repeat that, the possibilities are endless. > > > > > > HTH > > > > > > > > Steve > > > > --- In flexcoders@yahoogroups.com, "postwick" paul@ wrote: > > > > > > Can you give me a brief example of code that would achieve the part > > where you say "create a component"? > > > > > > Keep in mind the number of checkboxes and their labels is not > static. > > There are three tables involved: staff, modules, and queues. The > > checkboxes are created dynamically from the records returned from the > > modules and queues tables. > > > > > > --- In flexcoders@yahoogroups.com, "valdhor" valdhorlists@ wrote: > > > > > > > > I use repeaters quite a lot and like them. > > > > > > > > What I do is to create a component (Which sometimes contains other > > components) and the repeat that. > > > > > > > > In your situation, I would create a component with all of your > check > > boxes and save button. This component would have all of the > > functionality to display which check boxes are selected as well as the > > save button click handler. It would also have a public property that > > would take a data object. On creation complete of this component, it > > would check the values of the data object and set the check boxes > > appropriately. > > > > > > > > Then, I would repeat this component passing in the data objects > > returned from the remote object call... > > > > > > > > <mx:Repeater id="myStaff" dataProvider="{staffArrColl}"> > > > > <custom:CheckBoxComponent id="checkBoxs" > > person="{Person(myStaff.currentItem)}" /> > > > > </mx:Repeater> > > > > > > > > > > > > HTH > > > > > > > > > > > > > > > > Steve > > > > > > > > > > > > --- In flexcoders@yahoogroups.com, "postwick" <paul@> wrote: > > > > > > > > > > I don't like repeaters. They are too clumsy. The biggest > > drawback is an inability to access values after the repeater has > finish > > executing. It's not the same as, for example, looping over values and > > generating static HTML using ColdFusion. I seem to always end up > having > > to navigate up and down through the parents/children of the objects > and > > storing values I need in properties like name, automationName, etc. > > This is clumsy and messy. > > > > > > > > > > As an example, I have a section of my application where I want > to > > list the names of people from a table, and for each person generate a > > set of checkboxes that designate access to certain areas of the > > application. For example: > http://www.ubeek.com/images/staffrepeater.jpg > > > > > > > > > > That is one main repeater that loops through the staff (records > > returned from remoteObject) and inside that repeater two other > repeaters > > (also from remoteObjects) that generate the checkboxes. > > > > > > > > > > I can't simply pass the primary key of the staff for which the > > Save button was clicked, by putting > > click="saveClick({staffRepeater.currentItem.SEQ})" into the button > > object. When I do that and click it I get an error about "repeater is > > not currently executing" or something like that. > > > > > > > > > > I don't want to resort to a datagrid and then "click to edit" > then > > bring up a form kind of process. I want it as few clicks as possible. > > > > > > > > > > Is there a better way to display data in a custom way like this, > > without using repeaters, so that I can more easily access the child > > objects and their properties? > > > > > > > > > > Thanks, > > > > > Paul > > > > > > > > > > > > > > >