2012-07-27 52 views
0

在Flex中工作我需要用相当复杂的结构来填充字典。基于this documentation page我试图创建一个字典字面通过以下语法:Flex字典文字

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

我希望这段代码创建一个嵌套的字典结构三个映射:

  1. “类型” - >“页面“
  2. ”displayText“ - > ”XYZ“
  3. ”innerMarkings“ 与另一字典=>单元素数组内部含有:
    1. “ID” - > “ABC”
    2. “类型” - > “页”
    3. “displayText” - > “ABC”

什么代码实际上创建是一个 “对象”,根据获取QualifiedClassName。我在这里做错了什么? actionscript无法处理嵌套字典文字?

回答

3

你没有做错任何事情,这只是做你想要的结构的方式。使用something = {}something = new Object()的简写。没有这样的简写来创建Dictionary

the docs you linked

关联数组是Object类,这意味着 的一个实例,每个键对应于一个属性名称。

ActionScript 3.0中引入了一个先进的类型称为字典关联数组 的。字典是flash.utils包中的 Dictionary类的实例,它使用的键可以是任何数据类型的 ,但通常是Object类的实例。在其他 单词中,字典键不限于String类型的值。

为了让您预期的结果你必须做到以下几点:

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

没有什么错用Object作为关联数组。我可以看到唯一的问题是,使用ObjectDictionary之间的性能可能会有所不同,但是您需要进行一些分析,以查看a)是否存在差异,b)如果差异很重要。

+0

字典和对象主要在它们支持的键类型上有所不同。对象中的键总是被串起来的,而字典可以支持任何类型的键。 – 2012-07-28 01:17:27

+0

I + 1您的答案,但有一件事是不完全正确的:Dictionary是Object的一个子类,它基本上意味着与String关键字相关的任何值都将以与Object处理的方式完全相同的方式进行处理。因此,没有性能差异。字典通常不会带来好处,除非它们与Object键一起使用,因为在ActionScript中引用了数据:对象作为指针传递,而原始值(int,uint,Number,String)通过值传递 - 这也使“弱关键”的概念变得无关紧要。 – weltraumpirat 2012-07-28 20:02:33

+1

缺乏我想要的语法是不幸的。此外,对象是一个关联数组...是非常奇怪的。谢谢(你的)信息。 – 2012-07-28 23:04:40