2011-04-29 74 views
0

我在中继器中调用了一个组件。在调用中,我将几个变量传递给组件。所有这些工作都很好,除了一个名为totalSpan的...由于某种原因返回NaN。这里是我正在使用的代码:将变量传递给子组件,并获取NaN返回

家长:

<mx:Repeater id="indPositions" dataProvider="{projectPositions}" startingIndex="0" count="{projectPositions.length}"> 
     <components:block height="28" 
      id="thisBlock" visible="true" horizontalScrollPolicy="off" 
      width="{projectWidth}" 
      oneDay="{Number(oneDay)}" 
      offSet="{indPositions.currentItem[0]}" 
      numDays="{indPositions.currentItem[1]}" 
      position="{indPositions.currentItem[2]}" 
      sName="{indPositions.currentItem[3]}" 
      projectName="{projectTitle}" 
      totalSpan="{Number(Math.round(projectWidth.vl/oneDay))}" 
     /> 
    </mx:Repeater> 

所有的变量在那里做工精细和意志的typeof()就好了。

这里的孩子代码:

[Bindable] public var totalSpan:Number; 

,然后在init()函数我进行简单:

Alert.show(String(totalSpan)); 

警报回报 “南”。

offSet="{indPositions.currentItem[0]}" 
numDays="{indPositions.currentItem[1]}" 
position="{indPositions.currentItem[2]}" 
sName="{indPositions.currentItem[3]}" 

与说“数据绑定使用括号时将无法检测到的几率消息:

在一个半相关的说明,我对父母的以下行会有警告。运营商对于数组,请使用ArrayCollection.getItemAt()代替

任何人能揭示这些警告错误的一些光的例子,将不胜感激

回答

0

totalSpan所有任务首先是如下。?:

totalSpan="{Number(Math.round(projectWidth.vl/oneDay))}" 

width="{projectWidth}"我们可以看到projectWidthNumberint。所以它没有vl属性。而你的Number(Math.round(projectWidth.vl/oneDay))NaN。请正确重写。也许它应该如下:

totalSpan="{Number(Math.round(projectWidth/oneDay))}" 

关于第二部分。如果您在MXML中使用{},它代表数据绑定。数据绑定通过更改源提供目标属性的更改。并且消息指出Array是原始类型,mxmlc编译器无法生成代码以处理数组值的更改。

但是,从代码中可以明显看出数据结构存在一些问题。要完善它并不需要整个项目的代码是非常困难的,但是对于用作数据绑定源的数据,您应该使用具有数据绑定所需的[Bindable]元数据和ArrayCollection而不是Array的自定义数据类型。

尝试创建类似:

[Bindable] 
class MyDataObject 
{ 
    public var offSet:int; 
    public var numDays:int; 
    public var position:int; 
    public var sName:String; 
} 

,并把这些物品到你的中继的数据提供者。据我现在可以理解您的数据提供商是为中继器长度,但在现实生活中它应该提供中继器元素数据。所以,如果你进入你的中继您的自定义MyDataObject对象的ArrayCollection您可以使用类似以下内容:

<mx:Repeater id="indPositions" dataProvider="{projectPositions}"> 
     <components:block height="28" 
      id="thisBlock" visible="true" horizontalScrollPolicy="off" 
      width="{projectWidth}" 
      oneDay="{Number(oneDay)}" 
      offSet="{indPositions.currentItem.offSet}" 
      numDays="{indPositions.currentItem.numDays}" 
      position="{indPositions.currentItem.position}" 
      sName="{indPositions.currentItem.sName}" 
      projectName="{projectTitle}" 
      totalSpan="{Number(Math.round(projectWidth/oneDay))}" 
     /> 
</mx:Repeater> 

,甚至更多。您可以MyDataObject类型的整个对象传递给你的components:block组件:

<mx:Repeater id="indPositions" dataProvider="{projectPositions}"> 
     <components:block height="28" 
      id="thisBlock" visible="true" horizontalScrollPolicy="off" 
      width="{projectWidth}" 
      oneDay="{Number(oneDay)}" 
      myData="{MyDataObject(currentItem)}" 
      projectName="{projectTitle}" 
      totalSpan="{Number(Math.round(projectWidth/oneDay))}" 
     /> 
</mx:Repeater> 

希望这些想法帮助!