Flash 使用[Inspectable]在flex中构建对象检查器
我正在构建一个小工具,让用户在屏幕上放置一些几何图形,然后移动它们并更改它们的属性。我对as3/flex还很陌生 图形在as3中表示为对象。我们有圆,三角形,矩形类,它们有不同的属性 我喜欢做的是当用户选择一个图形时显示某种“对象检查器”。这个检查器窗口类似于许多IDE中的类似内容 现在的问题是:是否可以利用as3[Inspectable]标记来获取属性列表,并允许在运行时更改它们 如果不可能,那么在不编写特定于类型的代码来编辑每个对象的情况下,您将如何处理此问题 编辑: 我只是想澄清一下。考虑这个例子:Flash 使用[Inspectable]在flex中构建对象检查器,flash,actionscript-3,apache-flex,Flash,Actionscript 3,Apache Flex,我正在构建一个小工具,让用户在屏幕上放置一些几何图形,然后移动它们并更改它们的属性。我对as3/flex还很陌生 图形在as3中表示为对象。我们有圆,三角形,矩形类,它们有不同的属性 我喜欢做的是当用户选择一个图形时显示某种“对象检查器”。这个检查器窗口类似于许多IDE中的类似内容 现在的问题是:是否可以利用as3[Inspectable]标记来获取属性列表,并允许在运行时更改它们 如果不可能,那么在不编写特定于类型的代码来编辑每个对象的情况下,您将如何处理此问题 编辑: 我只是想澄清一下。考虑
public class Shape { /* ... */ }
public class Triangle extends Shape {
public var a:Number;
public var h:Number;
//...
}
public class Circle extends Shape {
public var r:Number;
public var name:String;
//...
}
我想让用户能够编辑a
,h
来自Triangle
和r
,名称
来自圆圈
根据我现在的想象,我可以走两条路:
三角形
和圆形
实现IMyInspectable
并为每种类型编写自定义getProperties():Dictionary
,getProperty(name:String):Object
和setProperty(name:String,value:Object):void
方法。这将涉及完全不合法的转换意大利面Nooga要求提供更详细的解释。这都是psuedo代码,但: 1) 创建一个接口:
package com.propertyInspector
{
public interface IPropertyInspectable
{
function get inspectableProperties( ):array;
}
}
2) 创建一个实现IPropertyInspectable的类
package com.propertyInspector
{
public class myClass implements IPropertyInspectable
{
public var property1 :String
public var property2 : Int
public function get inspectableProperties():Array{
return [{name:'property1',type:'String'},{name:'property2',type:'String'}, ]
}
}
}
3) 创建属性检查器
<s:List dataProvider="{someSelectedObjectThatImplementsIPropertyInspectable.inspectableProperties}">
<s:itemRenderer>
<s:Label text="data.name"/><s:TextInput />
</s:itemRenderer>
</s:List>
您必须弄清楚如何将对象传递到属性检查器。inspectableProperties中的属性对象可能需要引用它们所引用的实际对象,以便列表可以显示默认值
您可以使用itemRenderer函数根据类型显示不同的可编辑方法。一个字符串的文本输入,一个数字步进器,等等。你不能用一个创可贴来修复刀伤。我发现了:问题是它对我不起作用:[当然,我的应用程序运行时。“那么,至少选择一个不同的标签”。什么标记?:)我的主要问题是,我不知道如何实现这样的东西,更不用说为它制作标记了。我认为DescripteType在这里是一个过火的问题。我认为最优雅的解决方案是不为每种类型编写代码。这就是这里的问题:(@nooga使用您关于使用可检查metadta的建议;我认为DescripteType是在运行时获取自定义元数据的唯一方法。您是否建议了其他方法?我相信我的“接口方法”允许您对任何给定类型使用相同的“属性检查器”。您必须为每个“对象”编写的代码如下所示:“就像你需要的那样复杂“。同意flextras,没有理由使用元数据或批注。在这种情况下,我看不出它有什么好处。如果必须为每种类型编写批注来描述属性和潜在值,那么在自己的对象中而不是在元数据中这样做会有什么区别?使用“可检查”的接口”对象应该只是让它返回属性/值对象的集合,您甚至可以轻松地重用特定属性/值对象的定义,而不是在元数据中重复创建。您能提供一个简短的示例吗?恐怕我不完全理解flextras的方法:(@nooga我编辑了我的答案,添加了一些psuedo代码,希望能更好地解释这个方法。如果你需要更多,我可以作为一名顾问来雇佣你。