2012-07-27 1 views
0

플렉스에서 작업 상당히 복잡한 구조로 사전을 채워야합니다. > "페이지 -플렉스 사전 리터럴

  1. "유형 "

    var defaultMarkingA = 
         { 
          type: 'page', 
          displayText: 'XYZ', 
          innerMarkings: [ 
           {id: 'ABC', type: 'page', displayText: 'ABC'} 
          ] 
         }; 
    

    내가 만들려면이 코드는 세 개의 맵이 중첩 된 사전 구조 기대 : this documentation page을 바탕으로 나는 다음과 같은 구문을 통해 문자 사전을 만드는 시도 "

  2. "해당 DisplayText "->"XYZ "
  3. "innerMarkings "를 포함하는 다른 내부와 사전 => 단일 소자 어레이 :
    1. "ID"-> "ABC"
    2. "유형"-> "페이지"
    3. "해당 DisplayText"-> "ABC"

어떤 코드가 실제로 작성하는 것은 "개체"입니다 따라 getQualifiedClassName. 여기서 내가 뭘 잘못하고 있니? actionscript는 중첩 된 사전 리터럴을 처리 할 수 ​​없습니까?

답변

3

당신이 원하는 구조를 만들 수있는 방법이 아니라는 것을 잘못하지 않았습니다. something = {}을 사용하면 something = new Object()의 약자입니다. Dictionary을 작성하는 속기가 없습니다. the docs you linked 가입일

:

연관 배열 수단 개체 클래스의 인스턴스이며 속성 이름에 각 키에 대응한다.

ActionScript 3.0에는 사전이라는 연관 배열 의 고급 유형을 소개합니다. flash.utils 패키지의 Dictionary 클래스의 인스턴스 인 사전은 일 수있는 키를 사용하지만 모든 Object 유형의 인스턴스입니다. 다른 단어에서 사전 키는 String 유형의 값으로 제한되지 않습니다.

이 예상 된 결과를 얻으려면 다음을 수행해야 할 것 : 연관 배열과 같은 Object를 사용하여 아무 문제가 없습니다

var defaultMarkingA:Dictionary = new Dictionary(); 
defaultMarkingA["type"] = "page"; 
defaultMarkingA["displayText"] = "XYZ"; 
defaultMarkingA["innerMarkings"] = new Array(); 

var dict:Dictionary = new Dictionary(); 
dict["id"] = "ABC"; 
dict["type"] = "page"; 
dict["displayText"] = "ABC"; 

defaultMarkingA["innerMarkings"].push(dict); 

. 내가 볼 수있는 유일한 문제는 ObjectDictionary을 사용하는 경우 성능이 다를 수 있지만 a) 차이가 있는지, b) 그 차이가 중요한지 확인하려면 프로파일 링을해야합니다.

+0

사전과 개체는 주로 지원하는 키 유형이 다릅니다. 사전의 모든 유형의 키를 지원할 수있는 반면, 객체의 키는 항상 문자열입니다. –

+0

답을 +1했는데, 한 가지 사실이 아닙니다. Dictionary는 Object의 하위 클래스이므로 String 키와 관련된 모든 값은 Object에서 처리하는 것과 똑같은 방식으로 처리됩니다. 따라서 성능 차이는 없습니다.일반적으로 사전은 ActionScript에서 데이터가 참조되는 방식 때문에 Object 키와 함께 사용되지 않는 한 이점을 가져 오지 않습니다. 객체는 포인터로 전달되지만 원시 값 (int, uint, Number, String)은 값으로 전달됩니다 또한 "약 키"의 개념을 부적절하게 만듭니다. – weltraumpirat

+1

내가 원한 구문의 부족은 불행합니다. 또한, 연관 배열 인 객체는 아주 기괴합니다. 정보 주셔서 감사합니다. –