`
seya
  • 浏览: 356319 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

对flex中的[InstanceType]的困惑

阅读更多
最近因为工作上的需要,在学习flex.看了creating and extending flex2 components文档,网页链接如下:http://livedocs.adobe.com/flex/201/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=metadata_141_01.html#161936
有兴趣的可以一起研究下哈。
在学习到MetaData的时候,对其中的[InstanceType]这个不是很理解。按照文档中的解释,它是用来限定组建类型的。应用于创建模板的场景。请看如下代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" initialize="init();">
	<mx:Script>
		<![CDATA[
			import mx.validators.ValidationResult;
			import mx.core.UIComponent;
			import mx.containers.HBox;
			import mx.controls.CheckBox;
			
			[InstanceType("mx.controls.Button")]
			public var topRow:IDeferredInstance;
			
			[InstanceType("mx.controls.Button")]
			[ArrayElementType("mx.core.IDeferredInstance")]
			public var bottomRow:Array;
			
			private function init():void{
				addChild(UIComponent(topRow.getInstance()));
				
				var controlbox:HBox = new HBox();
				for(var i:int = 0;i<bottomRow.length;i++){
					controlbox.addChild(UIComponent(bottomRow[i].getInstance()));
				}
				addChild(controlbox);
			}
		]]>
	</mx:Script>
</mx:VBox>

在上面的代码中,使用了:(1)[InstanceType("mx.controls.Button")]
public var topRow:IDeferredInstance;
我们写了一个TemplateTest.mxml
对这个MyTemplateComponentDeferredSpecific.mxml进行使用的时候:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:MM = "components.*">
	<mx:Panel paddingTop="10" paddingBottom="10" 
        paddingRight="10" paddingLeft="10">
	<MM:MyTemplateComponentDeferred >
		<MM:topRow>
			<mx:Label text="button" />	 
		</MM:topRow>
		<MM:bottomRow>
			<mx:Button id="save" label="save1"/>
			<mx:Button id="btn2" label="cancel"/>
			<mx:Button id="btn3" label="back"/>		
		</MM:bottomRow>
	</MM:MyTemplateComponentDeferred>
	</mx:Panel>
</mx:Application>

与以上(1)处代码对应的是<MM:topRow>
<mx:Label text="button" />
</MM:topRow>
MetaData的作用就是告诉编译器如何去解析识别代码,所以在编译的时候,就对topRow里面的组建类型进行检验,由于这里是Label类型,而如(1)处代码所示,模板中限定了只能为Button类型,不匹配,便出现了error提示:In initializer for 'topRow': type mx.controls.Label is not assignable to target type mx.controls.Button
然后将它改称<mx:Button label="button">编译通用,没问题了。
但是,怀着好奇心,又试了一下,将它改成了<mx:CheckBox label="box">,问题出现了,居然没有报错。
遂又试了几个,将[InstanceType("mx.controls.Button")]改称[InstanceType("mx.controls.CheckBox")],也没问题。然后将<MM:topRow>
               <mx:Label text="button" />                        </MM:topRow>
改成<MM:topRow>
<mx:Button label="button" />
</MM:topRow>
出现warning:[InstanceType](mx.controls:CheckBox): type mx.controls:CheckBox is unavailable.
但是运行还是可以的,生成Button组建。
难道是组建之间存在什么兼容性?望高人指点。



分享到:
评论
2 楼 achuanle 2009-07-24  
谢谢你,看了你的代码让我更明白了InstanceType的用法
1 楼 achuanle 2009-07-24  
因为CheckBox继承了Button

相关推荐

    在C#DropDownCombo中使用AWS InstanceType属性

    从AWS开发工具包InstanceType类中读取静态属性,以获取AWS实例类型名称

    ios-ios 炒鸡简单使用地址选择器(AddressPickerView),支持省份,省市,省市区三种联动.zip

    (instancetype)provincePickerViewWithProvinceBlock:(void(^)(NSString *province))provinceBlock; /** * 显示省份和市级 * cityBlock : 回调省份和城市 */ (instancetype)cityPickerViewWithCityBlock:(void...

    IOS中自定义类中限制使用原生实例化方法

    IOS中自定义类中限制使用原生实例化方法 在自定义的类中,除了有系统自带的实例化方法外,还可能会有开发者自定义的实例化方法。当不想使用系统自定义方法时,而仅使用自定义的实例化方法时,可以这样做下限制。 ...

    iOS统计图表组件XXChartView.zip

    还可通过tintColor设置喜欢的颜色- (instancetype)initWithValues:(NSArray *)values xTittles:(NSArray *)xTittles yTittleCount:(NSInteger)yTittleCount; (instancetype)chartViewWithValues:(NSArray *)...

    HardCoreData:永远不会阻塞UI线程的CoreData堆栈和控制器

    这种聪明的方法将写入分离到其自己的专用队列中,并保持UI平滑为按钮。 HardCoreData由两个基础组成:HCDCoreDataStack和HCDCoreDataStackController。HCDCoreDataStack 封装本机CoreData堆栈设置。 /* Convenience...

    GoogleFontsiOS:包装为Pod的Google字体可在iOS中使用

    例如,如果您想安装ABeeZee ,请在ABeeZee中编写以下内容。 pod 'GoogleFontsiOS/ABeeZee' 安装所有字体会花费很多时间,不建议您这样做。用法每种字体都有一个对应的标头和UIFont类别形式的实现文件。 # import ...

    iOS开发教程之UIView和UIViewController的生命周期详解

    iOS开发中,创建View常见的两种方式一个是纯代码,一个是借助于XIB;创建ViewController常见的也有两种方式一个是纯代码,一个是借助于StoryBoard。 通过交流我发现很多童鞋对这些概念都很模糊,于是通过实验写一篇...

    ios-鹏哥哥轮播.zip

    如果对您有帮助 请前往上面地址 送我一颗星星呗 无限轮播 包含头部视图左右轮播 还有文字消息的上下轮播 该轮播原理 基于collectionView进行的封装 就是几个collectionView,至于无限轮播,很简单,只需要你的轮播...

    UIView-AutoLayoutView:UIView上的一个小型Objective-C类别,它创建了一个UIView对象,可以在程序化AutoLayout中使用该对象

    UIView + AutoLayoutView关于UIView上的一个小型Objective-C类别,它创建了一个UIView对象,该对象可用于编程式...介面@interface UIView (AutoLayoutView)+ ( instancetype ) newAutoLayoutView ;+ ( void ) up

    快速创建不同背景颜色视图效果

    该源码实现了快速创建不同背景颜色视图效果,源码TNColorScrollViewController, TNColorScrollViewControllers可以快速创建...- (instancetype)initWithColor:(UIColor *)color andCustomClass:(Class)customClass;

    iOS的HTTP请求和请求回执类用法小结

    NSURLRequest类中常用方法和属性总结: //通过类方法创建默认的请求对象 /* 通过这种方式创建的请求对象 默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑 默认请求超时时限为60s */ + (instancetype)request...

    ios-LBBanner.zip

    在LBBannerImgs文件夹下面有几张默认的图片,使用时可以删除掉,在LBBannerTools文件夹下面是我使用的工具类,不可删除,如果在你的项目中也用到了,可删除掉一个 使用方式 初始化 /** * 这个初始化方法...

    MHSegmentedControl

    将MHSegmentedControl.[hm]拖到您的项目中 ##用法 使用- (instancetype)initWithFrame:(CGRect)frame Option:(NSString *)option1 andOption:(NSString *)option2 backgroundColor:(UIColor *)backgroundColor ...

    IOS 开发自定义条形ProgressView的实例

    IOS 自定义进度条 ProgressView,好的进度条,让人赏心悦目,在等待的时候不是那么烦躁,也算是增加用户体验吧! 进度条在iOS开发中很常见的,我在项目开发中也写...-(instancetype)initWithFrame:(CGRect)frame withSta

    r-qap-optimization

    必须始终指定instanceType 。 instanceType可以定义为QAP或RQAP 。 问题实例必须在问题被提供的文件夹,文件扩展名为.dat的QAP实例和.rqap为RQAP实例。 必须始终将要优化的实例的名称指定为instanceName ,而无需...

    iOS经验之初始化方法中不该设置self.view的属性浅析

    日常iOS项目开发过程中,我们经常在类的初始化方法中初始化接下来类需要用到的一些必要的数据或界面。 本文主要介绍的是关于iOS初始化方法不设置self.view属性的相关内容,属于 iOS小经验系列:累积平时看起来简单,...

    ios-点击图片查看大图.zip

    - (instancetype)initWithAllPhotosArray:(NSArray *)photosArr currentIndex:(NSInteger)currentIndex way:(NSInteger )way; 参数1:photosArr --- 保存URL的数组 @[@"URL1",@"URL2"] 参数2:currentIndex --- ...

    iOS基础知识之@property 和 Ivar 的区别

    属性其实是对成员变量的一种封装。我们先大概这样理解: @property = Ivar + setter + getter Ivar Ivar可以理解为类中的一个变量,主要作用是用来保存数据的。 我们不妨来看个例子,通过下边的例子能够很清楚的...

    iOS系统定位demo封装

    +(instancetype)shareLocation; //创建开启定位对象 -(void)setUpLocation; //开启定位 -(void)startUserLocationService; //释放 -(void)releaseLocation; // - 未开定位时提示开定位 +(void)...

    加载带有手势识别器的XIB文件需注意哪些问题

    如果在你的应用程序中需要检测手势,比如点击(tap)、二指拨动 (pinch)、拖移...+ (instancetype)demoView; @end 提供一个类方法以供快速创建当前类 在.m中实现类方法,通常从XIB中加载出来的是一个数组,所以用到了l

Global site tag (gtag.js) - Google Analytics