• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flex und AIR > Flex allgemein

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 10-10-2006, 10:24   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 125
Referenz an dataGrid itemRenderer übergeben

Hallo,

ich möchte gern eine Referenz {this} an einen itemRenderer eines Datagrids in Flex 2 übergeben. Wie kann ich auf die Variablen per Actionscript zugreifen oder geht das noch einfacher?

Mit super... klappt es nicht. Bei einer eigenen komponente ist das ganze ja völlig einfach. Wie zum Geier greife ich aber aus dem itemRenderer auf den Namensraum der Hauptapplikation zu?

Bitte um Rat. Danke.
Ju2999 ist offline   Mit Zitat antworten
Alt 10-10-2006, 10:27   #2 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 125
Nicht mal Application.application. ist möglich....
Ju2999 ist offline   Mit Zitat antworten
Alt 11-10-2006, 11:26   #3 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Dafür gibt es viele Möglichkeiten.
Application.application sollte klappen, ist aber sehr global.
Eine andere Möglichkeit wäre es, die Referenz in deine Daten zu packen.
Oder du gibst deinem ItemRenderer eine statische Eigenschaft, der du die Referenz zuweist.
Hier mal ein paar Testbeispiele:
PHP-Code:
//ApplicationEntry.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="vertical" creationComplete="onCreationComplete()">
    
    <mx:Script>
        <![CDATA[

            import mx.collections.ArrayCollection;
        
            [Bindable]
            private var gridData : ArrayCollection;
            
            public var applicationName : String = "WowSuper";
        
            
            
            private function onCreationComplete() : void
            {
                trace("ApplicationEntry::onCreationComplete");
                
                initGridData();
            }

            private function initGridData() : void
            {
                gridData = new ArrayCollection();
                gridData.addItem( createItem( 1 ) );
                gridData.addItem( createItem( 2 ) );
            }    
            
            private function createItem( nr: uint ) : Object
            {
                var result : Object = new Object();
                result.nr = nr;
                result.name = "item " + nr;
                                result.reference = this;
                return result;
            }
            
            private function initItemRenderer() : void
            {
                TestItemRenderer.myExternalReference = this;
            }
        ]]>
    </mx:Script>

    <mx:DataGrid dataProvider="{ gridData }" preinitialize="initItemRenderer()">
        <mx:columns>
            <mx:DataGridColumn itemRenderer="TestItemRenderer"/>
            <mx:DataGridColumn itemRenderer="TestItemRenderer"/>
        </mx:columns>
    </mx:DataGrid>
    
</mx:Application>

//TestItemRenderer.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Label 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    creationComplete="onCreationComplete()">
    
    <mx:Script>
        <![CDATA[
        
            import mx.core.Application;    
            
            
            public static var myExternalReference : Object;

            private function onCreationComplete() : void
            {
                trace("TestItemRenderer::onCreationComplete data: " + data );
                trace("TestItemRenderer::onCreationComplete application: " + Application.application.applicationName );
                trace("TestItemRenderer::onCreationComplete myExternalReference: " + myExternalReference.applicationName );
                                 if( data != null )
                {
                    trace("TestItemRenderer::onCreationComplete data.reference: " + data.reference.applicationName );
                }
            }
            
        ]]>
    </mx:Script>

</mx:Label>
mfg. r

Geändert von bokel (11-10-2006 um 11:31 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 11-10-2006, 13:27   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 125
Danke.

Ich habe inzwischen aufgrund eines sehr verstecktem Kommentars innerhalb der Flex-Referenz-Seiten eine einfache Lösung gefunden:
Code:
<mx:DataGridColumn ...>
  <mx:itemRenderer>
    <mx:Component>
      <myGridRenderer caller="{outerDocument}" ... /> 
    </mx:Component>
  </mx:itemRenderer>
</mx:DataGridColumn>
Wie schön wäre es, wenn es mehr 100%ig richtige Referenzbeispiele gäbe...
Ju2999 ist offline   Mit Zitat antworten
Alt 11-10-2006, 15:37   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ah, oh, aeh,
ich hatte gar nicht gesehen, dass es um inline ItemRenderer geht.
mfg. r
bokel ist offline   Mit Zitat antworten
Alt 11-10-2006, 18:38   #6 (permalink)
Neuer User
 
Registriert seit: Aug 2005
Beiträge: 125
{outerDocument} anstatt {this} im inline-Element ist auch wissenswert
Ju2999 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele