我是一名Java程序员,现在需要处理Flex / ActionScript项目。我得到了一个使用Flex 3 Cookbook的ITreeDataDesriptor的例子,但是有一行动作脚本代码很难理解。如果有人能够进一步解释这一点我感激不尽。
public function getData(node:Object, model:Object=null):Object
{
if (node is Office) {
return {children:{label:node.name, label:node.address}};
}
}
我不理解的部分是“{children:{label:node.name,label:node.address}}”。 Office只是一个包含两个String属性的值对象:名称和地址。
答案 0 :(得分:7)
以下返回表达式(从问题中修改)......
return {children:{label:node.name, body:node.address}}
...在功能上等同于此代码......
var obj:Object = new Object();
obj.children = new Object();
obj.children.label = node.name;
obj.children.body = node.address;
return obj;
问题代码中返回的匿名对象使问题复杂化,因为它定义了两次属性。在这种情况下,使用第一个声明,并忽略后续声明。不会抛出编译时或运行时错误。
答案 1 :(得分:1)
我认为在Java中你会称之为地图或关联数组。在Javascript和Actionscript中,您可以这样说来创建具有某些属性的对象:
var myobject = {
'prop1': 100,
'prop2': {
'a': 1
}
}
trace( myobject.prop1 ); // 100
trace( myobject.prop2.a ); // 1
在您的示例中,它只是作为无名对象返回。
答案 2 :(得分:1)
return {children:{label:node.name, label:node.address}};
表示您正在返回一个新对象。 {}是Object的构造函数,在本例中是一个Anonymous对象。
答案 3 :(得分:0)
感谢您的快速回复。因此,如果我正确理解你的解释,return语句将返回一个匿名对象,并且这个对象只有一个名为“children”的属性,这又是一个关联数组 - 好的,这是我还不太了解的部分,似乎这个数组中的两个属性都被命名为“label”,这是允许的吗?