2011-04-29 6 views
0

리피터 내에서 구성 요소가 호출되고 있습니다. 호출 내에서 구성 요소에 여러 변수를 전달합니다. 어떤 이유로 든 NaN을 반환하는 totalSpan ...이라는 이름을 제외하고는 모두 잘 작동합니다. 여기에 내가 함께 일하고 있어요 코드입니다 :하위 구성 요소에 변수 전달 및 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() 잘합니다.

Alert.show(String(totalSpan)); 

경고를 반환은 「NaN "

[Bindable] public var totalSpan:Number; 

다음은 init() 함수에서 나는 단순한를 수행

여기에 아이 코드입니다. 데이터 대괄호를 사용하는 경우 기회를 감지 할 수 없습니다 바인딩 "라는 메시지와 함께

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

: 세미 관련 주에

, 나는 부모의 다음 줄에 경고를 받고 있어요 . 연산자 배열 대신) ArrayCollection.getItemAt를 (사용하십시오

아무도 이러한 경고 오류에 도움이 되거 수있는 예제가 크게 감상 할 수

totalSpan의 모든 과제의

답변

0

먼저 다음이다 .?. :

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

하지만 width="{projectWidth}"에서 우리가 projectWidth을 볼 수는 Number 또는 int이다. 따라서 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; 
} 

및 중계기의 데이터 공급자에 이러한 항목을 넣어 :

같은 것을 만들어보십시오. 지금까지 데이터 제공자가 중계기 길이에 대한 것이지만 실제로는 중계기 요소 데이터를 제공해야한다는 것을 이해할 수 있습니다.

<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 객체의 ArrayCollection은 다음과 같은 것을 사용할 수 있습니다.당신은 당신의 components:block 구성 요소에 MyDataObject 유형의 전체 개체를 전달할 수 있습니다

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

이러한 생각의 도움을 희망!