【发布时间】:2012-03-04 18:39:03
【问题描述】:
在 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 上的结果为空。 有任何想法吗? 谢谢。
编辑:
根据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 与循环将通过的数据类型无关,它实际上是属性的名称,它有意义,因为每个 name 都是 String。
【问题讨论】:
-
您能告诉我们更多关于您为什么要实现这一目标的信息吗?这违背了 ActionScript 的设计原则,可能有更好的方法来实现您的目标。
-
当用户双击数据网格上的记录时,我会自动打开一个包含该实体表单的不同状态,并用他的寄存器 (dataGridId.selectedItem) 填充所有字段。但这是一个对象,当我要为 PHP 发送它时,我“手动”将整个表单转换为个性化模型。如果我可以将表单与Model绑定,我就不再需要遍历所有字段并一一设置Model属性了。
标签: model-view-controller object actionscript casting