2012-04-13 9 views
0

Flex 4.6 Mobile ApplicationZugriff von nicht definierte Eigenschaft - Flex 4.6

ich den Fehler "Zugriff auf nicht definierte Eigenschaft PrepForDisplay" tag

In meiner Erklärungen Ich habe

<s:CurrencyFormatter id="PrepForDisplay" 
    currencySymbol="" 
    useCurrencySymbol="true" 
    negativeCurrencyFormat="0" 
    positiveCurrencyFormat="0"/> 

In meinem MXML bin immer Abschnitt ich habe

<s:List id="lst" dataProvider="{dp}" useVirtualLayout="true" width="100%" height="95%" top="30" alternatingItemColors="[#66FFFF, #33CCCC]"> 
<s:itemRenderer> 
<fx:Component> 
     <s:ItemRenderer> 
    <s:HGroup gap="10"> 
    <s:Label text="{data.Period}" /> 
    **<s:Label text="{PrepForDisplay.format(data.Payment)}" />** 
    </s:HGroup> 
    </s:ItemRenderer> 
</fx:Component> 

Der Fehler tritt in der fett gedruckten Zeile auf. Wenn ich es in Number (data.Payment) ändern .toFixed (2) alles funktioniert gut. Ich habe den currencyFormatter so verwendet, wie ich es bei anderen Views mit Erfolg habe. Ich kann es sogar in dieser Ansicht in einer Funktion verwenden, aber wenn ich versuche, es in der Beschriftung anzuwenden, erhalte ich den Fehler.

Irgendwelche Ideen?

prost,

Antwort

3

Meine Vermutung ist, dass es ein Scoping-Fehler, auf anderen Worten der Formatierer im Rahmen der Komponente erstellt werden, das die Liste erstellt und die itemRenderer werden sein die Liste instanziiert. Es kennt also keine Variable (PrepForDisplay), auf die im itemrenderer verwiesen wird.

es zu lösen, einfach den CurrencyFormatter-Tag in dem itemRenderer bewegen:

<s:ItemRenderer> 
<fx:Declarations> 
<s:CurrencyFormatter id="PrepForDisplay" 
currencySymbol="" 
useCurrencySymbol="true" 
negativeCurrencyFormat="0" 
positiveCurrencyFormat="0"/> 
</fx:Declarations> 
<s:HGroup gap="10"> 
    <s:Label text="{data.Period}" /> 
    <s:Label text="{PrepForDisplay.format(data.Payment)}" /> 
</s:HGroup> 

Oder einfach die itemRenderer in einer separaten Datei definieren.

+0

Danke sydd, das hat perfekt funktioniert. Ich weiß nicht warum, aber es hat es getan. Ich bin Flex sehr neu und es fällt mir schwer, der Adobe-Dokumentation zu folgen. Nochmals danke ich dir für deine schnelle Antwort. – user1332657

+0

Der Grund dafür ist, dass wenn Sie einen Elementrenderer angeben (indem Sie ihn in ein '' -Tag einfügen, das auch als Inline-Elementrenderer bezeichnet wird), erstellen Sie tatsächlich eine separate Klasse, die nicht Teil davon ist die Elternklasse. Wenn Sie also die Deklaration innerhalb des Elementrenderers verschieben, haben Sie diesen Währungsformatierer für den Renderer verfügbar gemacht. Beachten Sie, dass es einen signifikanten Unterschied gibt, was passiert, nachdem Sie diese Änderung vorgenommen haben: Ursprünglich hatten Sie nur 1 'CurrencyFormatter'-Objekt, jetzt haben Sie 1 Formatierer für jeden Elementrenderer :) –

Verwandte Themen