2009-09-02 21 views
1

我有很多Flex對象像這樣的:在Flex3中,對象屬性是什麼類型?

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 
} 

有人可以在這裏填寫空白嗎?

回答

3

您可能需要諸如describeType之類的東西。也許你需要使用getDefinitionByName(),如果你想製作一個真實的物體。所以這樣的東西你的功能的內容:

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

我還沒有編譯它。只是扔在那裏,看看它是否有幫助。

+0

謝謝,這正是我需要的! –

0

您可以使用'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]; 
    } 
    } 
} 

心連心

公園

+0

如果obj [屬性]未定義,這是否可行? –

+0

在未定義的屬性上使用'is運算符'將始終返回false –

+0

然後,遺憾的是,這不是我正在尋找的答案。 –

-1

如果你需要一個對象變量映射到一個變量類作爲邁德特你可以做以下

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必須包含確切的「時間」和「標籤」屬性。

希望它能解決您的問題