Tracy
In trying to follow your best practice, and this being my first 
attempt at a Flex Component, I've been having trouble the past few 
days putting this together.

I tried to look at the livedocs example for the commitProperties() 
and apply it to my example but I'm having trouble making that happen.

I added two private vars to my Component code:
private var _value:Number;
private var _name:String;

I see that I can override the set value function for "value" property 
of my slider:
public function set value(val:Number):void
{
    trace("I'm in set value);
    _value = val;
    invalidateProperties();
}

But there is no override for the slider's "name" property. So I 
created a setName(n) function, but I'm not sure how to call this from 
my main application.
public function setName(n:String):void
{
    trace("I'm in setName);
    _name = n;
    invalidateProperties();
}


How do I or When is the set value() function called? I didn't have to 
manually call the set data(). It was called for me when I assigned a 
new object with a name and value for the slider.
I put trace statement in the set value but it never seemed to be 
called from anything.


I added the override commitProperties() function. But since set value 
is never called and I'm sure how to call it from my main application 
since it's a column inside a datagrid.

override protected function commitProperties():void
{
    trace("In commitProperties);
    super.commitProperties();
    mySlider.value = _value;
    mySlider.name = _name;
                         
}


Am I going in the wrong direction here? I think I'm close but just 
missing a few pieces, of code that is. Ha Ha.

Thanks for you time and help
Greg


--- In [email protected], "Tracy Spratt" <[EMAIL PROTECTED]> 
wrote:
>
> Whoops, sorry, looking at your code, your are headed in the right
> direction.  Maybe debug to see what is resetting the slider value?
> 
> Also, best practice is to store the data vlue in a local var, and 
call
> invalidateProperties().  Do the work in commitProperties().  Set 
data
> gets called very often, but the call to commitProperties is 
optimized by
> the framework.
> 
> Tracy
> 
> -----Original Message-----
> From: [email protected]
> [mailto:[EMAIL PROTECTED] On Behalf Of Tracy Spratt
> Sent: Tuesday, June 24, 2008 2:35 PM
> To: [email protected]
> Subject: RE: [flexcomponents] Slider in a Datagrid resets when 
Datagrid
> is scrolled.
> 
> Item renderers are recycled, so all row-level state must be data-
driven.
> 
> Your slider must obtain its value from a property on the 
dataProvider
> item, and set that value in the commitProperties or 
updateDisplayList
> methods. 
> 
> It must also update that same dataProvider item property value when 
a
> user interacts with the control.
> 
> Find an example of a working itemRenderer and modify that to fit 
your
> needs, rather than attempt to create one from scratch.
> 
> Tracy
> 
> -----Original Message-----
> From: [email protected]
> [mailto:[EMAIL PROTECTED] On Behalf Of gbkpicasso
> Sent: Monday, June 23, 2008 12:19 PM
> To: [email protected]
> Subject: [flexcomponents] Slider in a Datagrid resets when Datagrid 
is
> scrolled.
> 
> Hello,
> I have a HSlider custom component that is used as a column in a 
> datagrid. If I change the value of a slider and then scroll the 
> datagrid so that row does not appear, the value of the slider is 
> reset to it's original value. It does not trigger a change event, 
it 
> only visually moves the slider.
> This does not happen to rows that are still viewable in the 
datagrid. 
> It only happens to rows that are not seen after the datagrid is 
> scrolled.
> How can I keep the sliders from changing back to their original 
value?
> 
> Thanks
> Greg
> 
> I have included my Application code and the custom component code 
> below.
> 
> //-------------------------------------
> // Application code:
> //-------------------------------------
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"; 
> layout="absolute">
> 
> <mx:Script>
>       <![CDATA[
>               import mx.collections.ArrayCollection;
>               
>               [Bindable]
>               private var dataLayers:ArrayCollection = new 
> ArrayCollection(
>               [ {name:'Data 1',value:'1'},
>                                 {name:'Data 2',value:'1'},
>                                 {name:'Data 3',value:'1'},
>                                 {name:'Data 4',value:'1'},
>                                 {name:'Data 5',value:'1'},
>                                 {name:'Data 6',value:'1'},
>                                 {name:'Data 7',value:'1'},
>                                 {name:'Data 8',value:'1'},
>                                 {name:'Data 9',value:'1'},
>                                 {name:'Data 10',value:'1'}]); 
>               
>       ]]>
> </mx:Script>
>       <mx:DataGrid dataProvider="{dataLayers}" width="221">
>                       <mx:columns>
>                                       <mx:DataGridColumn 
> headerText="Name" dataField="name" width="95" />
>                                       <mx:DataGridColumn 
> headerText="Value" dataField="volumn" itemRenderer="MySlider"/>
        
>                                                               
>                                                               
>                               
>                       </mx:columns>
>       </mx:DataGrid>
> </mx:Application>
> 
> //-------------------------------------
> // Custom Component code in a file called MySlider.mxml:
> //-------------------------------------
> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"; width="100%" 
> height="100%">
> <mx:Script>
>       <![CDATA[
>               import mx.events.SliderEvent;
>               
>               private function slideChanged(event:SliderEvent):void
>               {
>                       trace("Slider Changed: " + mySlider.name + ", 
> Value: " + event.value);
>                       var myEvent:SliderEvent = new SliderEvent
> (SliderEvent.CHANGE,true,event.cancelable, event.thumbIndex, 
> event.value,event.triggerEvent, event.clickTarget,event.keyCode);
>                       dispatchEvent(myEvent); 
>               }
>               
>               override public function set data(myVal:Object):void
>               {
>                       mySlider.value = myVal.volumn;
>                       mySlider.name = myVal.name;
>               }
>       ]]>
> </mx:Script>
>       <mx:HSlider id="mySlider" width="100" minimum="0" 
> maximum="1.25" liveDragging="true" change="slideChanged(event)" />
> </mx:VBox>
> 
> 
> 
> ------------------------------------
> 
> Yahoo! Groups Links
> 
> 
> 
> 
> 
> 
> ------------------------------------
> 
> Yahoo! Groups Links
>


Reply via email to