对我来说另一个flashbuilder的破坏者......
我有一个带有contstructor的类,它只能改变图像的来源。
[Bindable]
[Embed(source='../pictures/test.jpg')]
private var _picture:Class;
public function Test(newSource:*****)
{
_picture.source = newSource;
}
(图像不是图像,而是一个类,我知道这个,它的意思是:-))
问题在于,当我调用构造函数时,让我们说:
var test:Test = new Test(pictureAtStage.source);
Flashbuilder会出错,因为我无法告诉编译器构造函数中的“newSource”数据类型会有什么...
*编辑: 当我使用_picture.source时,嵌入的源似乎没有改变......?
有人知道答案吗?
答案 0 :(得分:1)
这确实有点令人困惑,它的类型BitmapAsset
扩展了Bitmap
。所以这些都可行。
答案 1 :(得分:1)
我们在谈论mx.controls.Image
吗?如果是这样,那么图像的源可以是:一个类,一个位图(不是一个BitmapData),一个字符串(在这种情况下,假设你想要加载它而不是使用嵌入的一个)。如果你想找到所有这些的共同点,那么Object就是那个类,但是,我宁愿将它限制在特定于你的用例的地方。
但是,如果我可以建议任何事情......不要使用mx.controls.Image
,即使对于Flex框架,它也太臃肿了。如果它必须是UIComponent - 扩展UIComponent并让源为BitmapData类型 - 这样你就能够更好地管理资源 - 例如,你可以重用相同的实际图像。然后,您可以使用控件的graphics
属性来显示图像。
另一个建议,如果你还在这里:)不要使用[Bindable]
,特别是它的简短版本,尤其是私有变量 - 你会省去无数个小时的调试挫折。 ..此外,在你的情况下,你无论如何都不会改变那个变量的值......
[Embed]
,在类定义上使用它 - 稍微为你工作,但这可能会使你的代码更具可移植性。如果你在类上嵌入编译器将不会生成一个愚蠢的“某事物 - 资产”类,它将使用Bitmap或BitmapData - 无论你的类扩展。因此,您不会引入对Flex框架的依赖,并且通常您可以更好地控制代码。
编辑:上面写的是假设_picture(class)变量和_picture(函数中使用的某些变量)不是同一个东西。但如果它们是同一个东西,那么Class
类是动态的,这意味着你可以在运行时添加属性(不知道为什么,这是Adobe的设计决定...),但是,编译器将表现得好像不可能,所以你可以通过反射添加属性来解决这个问题:
var _picture:Class = Sprite;
_picture["source"] = whatever;
trace(Sprite["source"]);
答案 2 :(得分:1)
因为我对flashbuilder很新,所以我没有看到明显的解决方案......
我问题第一部分的解决方案(编辑前): 将数据类型设置为Object可以解决问题:
[Bindable]
[Embed(source='../pictures/test.jpg')]
private var _picture:Class;
public function Test(newSource:Object)
{
_pucture.source = newSource;
}