将ActionScript对象转换为模型

时间:2012-03-04 18:39:03

标签: model-view-controller object actionscript casting

在ActionScript 3中是否有“自动方式”将“对象”强制转换为个性化的模型数据类型?

示例:

package Example{
   public class ExampleModel{
       private _id:int;
       private _randomAttribute:String;

       public function ExampleModel(){
           _id = 0;
           _randomAttribute = "";
       }

       public function get id():int{
           return _id;
       }

       public function set id(value:int):void{
           _id = value;
       }

       public function get randomAttribute():String{
           return _randomAttribute;
       }

       public function set randomAttribute(value:String):void{
           _randomAttribute = value;
       }
   }
}

然后,在我的代码的某些部分,让我们假设我有这样的东西:

var _obj:Object = new Object();
_obj.id = 1;
obj.randomAttribute = "Hello World";

我想要的是:

var _exampleModel:ExampleModel = obj as ExampleModel;

但是当我这样做时,_exampleModel上的结果为null。 有任何想法吗? 感谢。

编辑:

根据 Manish 的回答,我所改变的只是p var的类型,它允许我通过各种属性:

public function fromObject(obj:Object):void{
    //p:* includes every type of attributes.
    for (var p:* in obj)
        if (this.hasOwnProperty(p))
            // Set private var directly.
            this["_" + p] = obj[p];
}

感谢 Manish rcdmk 。 Manish的回答对我来说已经足够了,根据 rcdmk 的评论,p:String不是关于循环将经历的数据类型,它实际上是属性的名称,这是有道理的,因为每个名称都是字符串

1 个答案:

答案 0 :(得分:3)

自动“施放”它的唯一方法如下:

var model:Model = new Model();
var obj:Object = { id: "98123", name: "John Doe" };

for (var p:String in obj) {
    if (model.hasOwnProperty(p))
        model[p] = obj[p];
}

(注意:Model.idModel.name在我的示例中都是String类型。)

当然,更合适的方法是将普通对象传递给Model对象,让Model对象吸收它。

var model:Model = new Model(obj);

或者:

var model:Model = new Model();
model.fromObject(obj);

您拥有Model代码的位置:

public function Model(obj:Object = null)
{
    if (obj != null)
        fromObject(obj);
}

public function fromObject(obj:Object):void
{
    for (var p:String in obj)
        if (this.hasOwnProperty(p))
            // Set private var directly.
            this["_" + p] = obj[p];
}

此代码可以在您的抽象基础Model类中,您所有特定的Model子类(例如ProductModelCustomerModel等)都可以自动使用它。

e.g。

public class ProductModel extends Model
{
    public function ProductModel(obj:Object = null)
    {
        super(obj);
    }
}