2012-04-13 74 views
0

的Flex 4.6移动应用访问 - 的Flex 4.6

我收到错误 “访问未定义的属性PrepForDisplay”

在我的声明标签我有

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

在我的MXML我有

<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> 

粗线上发生错误。 如果我将它更改为Number(data.Payment).toFixed(2),一切正常。 我已经使用currencyFormatter的方式,我成功地在其他视图上使用它。我甚至可以在一个函数中的这个视图上使用它,但是当我尝试将它应用到标签中时,我会看到错误。

任何想法?

欢呼声,

回答

3

我的猜测是,它的一个范围错误,在换句话说格式化获取组件的范围,创建列表和的itemRenderer被实例化是列表中创建。所以它不知道变量(PrepForDisplay),它是在itemrenderer内引用的。

为了解决这个问题,只需要移动的CurrencyFormatter标签的itemRenderer内:

<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> 

或者干脆在一个单独的文件中定义的itemRenderer。

+0

谢谢sydd,工作完美。我不知道为什么,但它确实如此。我对Flex非常陌生,而且我很难遵循Adobe文档。我再次感谢您的快速回复。 – user1332657 2012-04-14 01:54:58

+0

它工作的原因是,当你指定一个像这样的项目渲染器(将它包装在一个''标记中,也称为内联项渲染器)时,你实际上创建了一个不属于父类。所以通过在项目渲染器中移动声明,您可以使渲染器可以访问货币格式化程序。请注意,在进行更改之后发生了什么显着差异:原来您只有1个CurrencyFormatter对象,现在每个项目渲染器都有1个格式化程序:) – 2012-04-14 05:25:03