flex-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From modjkl...@comcast.net
Subject how to updateDisplayList() in custom headerRenderer?
Date Sun, 30 Nov 2014 03:12:47 GMT
I'm using 4.12 SDK and trying to update a headerRenderer that includes a TextInput. Things
works fine when the component is initialized. But thereafter, when I change the model such
that the text showing in the TextInput box should change, the text doesn't change. 

Can someone help me figure out how to programmatically refresh the header renderer TextInput
text using function updateCondition() in file MyView.mxml below? 

I've tried create a temp IFactory for the header renderer, null the original one, then save
the temp back to the original, but this didn't work. Also tried invalidateDisplayList() on
myGrid (didn't work either). 

Here's MyHeaderRenderer.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer
	xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:s="library://ns.adobe.com/flex/spark" 
	xmlns:mx="library://ns.adobe.com/flex/mx" 
	xmlns:itemRenderers="com.example.views.itemRenderers.*">

	<fx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
                        import com.example.views.components.MyGrid;
			
			public function ti_focusOut():void {
				MyGrid(this.owner['parentDocument']).myCondition=Number(ti.text);
				MyGrid(this.owner['parentDocument']).dispatchEvent(new Event("myConditionChanged"));
			}
			
			override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
				if (this.owner['parentDocument'] && ti && MyGrid(this.owner['parentDocument']).myCondition)
{
					ti.text=String(MyGrid(this.owner['parentDocument']).myCondition);
				}
				super.updateDisplayList(unscaledWidth,unscaledHeight);
			}	
		]]>
	</fx:Script>
	<s:states>
		<s:State name="normal"/>
	</s:states>
	<s:TextInput id="ti" width="40" focusOut="ti_focusOut();"/>
</s:GridItemRenderer>


and here's MyGrid.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx">

	<fx:Metadata>
		[Event(name="myConditionChanged", type="flash.events.Event")]
	</fx:Metadata>

        <fx:Script> 
            <![CDATA[
               ...
               [Bindable] private var _myCondition:Number;            
               public function set myCondition(value:Number):void {
                  _myCondition=value;
                  if (grid.columnHeaderGroup) {
                     grid.columnHeaderGroup.layout.clearVirtualLayoutCache();
                     grid.columnHeaderGroup.invalidateDisplayList();
                  }
                  grid.invalidateDisplayList();
               }
               [Bindable] public function get myCondition():Number {  
                   return _myCondition;
               }
               ...
            ]]> 
         </fx:Script>

    <s:DataGrid id="grid">
        <s:columns>
            <s:ArrayList>
                <s:GridColumn .../>
                <s:GridColumn id="myColumn" dataField="myCond" headerRenderer="com.example.views.itemRenderers.MyHeaderRenderer"/>
                <s:GridColumn .../>
            </s:ArrayList>
        </s:columns>
    </s:DataGrid>
</s:Group>

and finally, here is MyView.mxml:

<?xml version="1.0" encoding="utf-8"?>
<views:View xmlns:fx="http://ns.adobe.com/mxml/2009"  
	xmlns:s="library://ns.adobe.com/flex/spark" 
	xmlns:mx="library://ns.adobe.com/flex/mx" 
	xmlns:components="com.example.views.components.*">
        ...
        <fx:Script> 
            <![CDATA[
                private function updateCondition():void {
                   myGrid.myCondition=newValue;  
                   // how to force refresh of TextInput in header renderer with newValue?
                }
                private function onChange():void {
                   ...
                }
            ]]> 
         </fx:Script>
         <components:MyGrid id="myGrid" myConditionChanged="onChange();"/>
         ...
</views:View>

Mime
View raw message