【问题标题】:In Flex3, what type is an object property?在 Flex3 中,对象属性是什么类型?
【发布时间】:2009-09-02 22:15:02
【问题描述】:

我有很多这样的 Flex 对象:

public class MyData {
    public var time: Date;
    public var label: String;
}

我正在从通过 AMF 检索到的数据库记录中填充此对象,如下所示:

{
    label: "Label",
    incident: "2009-08-15 11:12:14.12233"
}

我想为这些对象编写一个通用值映射器,给定一个目标对象(此处为MyData 的实例)和一个输入记录,将能够判断MyData.time 是一个Date 字段并执行自动类型映射。像这样的:

function map(obj, targetType): * {
    var newInstance: * = new targetType();
    for (var property: String in obj) {
        if (getPropertyType(targetType, property) == Date) {
            newInstance[property] = parseDate(obj[property]);
        }
        else {
            newInstance[property] = obj[property];
        }
    }
}

function getPropertyType(type_var: Class, property: String): Class {
    // .. this is what I have no idea how to do
}

有人可以在这里填空吗?

【问题讨论】:

    标签: apache-flex actionscript-3 reflection actionscript flex3


    【解决方案1】:

    您可能需要describeType 之类的东西。如果你想制作一个真实的对象,也许你需要使用 getDefinitionByName() 。所以对于你的函数的内容是这样的:

    var typeXml:XML = describeType(type_var[property]);
    return getDefinitionByName(typeXml.type[0].@name);
    

    我还没有编译它。只是把它扔在那里看看它是否有帮助。

    【讨论】:

    • 谢谢,这正是我所需要的!
    【解决方案2】:

    您可以使用“is”运算符来检查对象的类型。

    The is operator

    function map(obj, targetType): * {
      var newInstance: * = new targetType();
      for (var property: String in obj) {
        if (obj[property] is Date) {
          newInstance[property] = parseDate(obj[property]);
        }
        else {
          newInstance[property] = obj[property];
        }
      }
    }
    

    科恩

    【讨论】:

    • 在未定义的属性上使用“is 运算符”将始终返回 false
    • 那么,很遗憾,这不是我想要的答案。
    • 我不明白。我认为“未定义”意味着该属性没有价值,也没有类型。为什么你希望它返回 true?
    【解决方案3】:

    如果您需要将 Object 变量映射为 MyData 变量类,您可以执行以下操作

    public class MyData 
    {
        public var time: Date;
        public var label: String;
    
        function map(obj:Object):void
        {
          for (var property: String in obj) 
          {
              this[property] = obj[property];
          }
        }
    }
    

    注意:对象 obj 必须包含准确的“时间”和“标签”属性。

    希望它能解决你的问题

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2018-04-30
      相关资源
      最近更新 更多