2011-04-29 51 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> 

希望這些想法幫助!