`
luhantu
  • 浏览: 205252 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

继承父类并继承父类的控件

    博客分类:
  • Flex
阅读更多

在Flex当中,如果父类已经拥有了子元素,然后你再继承这个父类,并且在子类当中也定义了mxml的标签元素,那么将会只显示子类的mxml标签元素而不会显示父类的mxml标签元素。

当然你可以重写createChildren方法,然后把你要显示的子元素以代码形式添加,这样绝对可以把父类的元素全部继承下来。但是为什么写标签形式就不行呢?

我们仔细窥探一下,发现用mxml标签形式写的时候,flex会把这些标签放通过 mxmlContent的set方法放到一个数组中,然后在createChildren的时候把这个数组中的元素一个一个加到显示列表中。

如果你的子类继承了父类,而且子类也定义了mxml标签,那么当初始化子类的时候,也会调用mxmlContent的方法,这样的话就会把父类的保存父类标签的数组冲掉,导致只会现实子类的标签了。

明白了这些,那我就直接贴代码了。

App:

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   minWidth="955" minHeight="600" 
			   xmlns:Vgroup="com.view.Vgroup.*">
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<Vgroup:ChildVGroup2/>
	<Vgroup:ChildVGroup/>
</s:Application>
 ChildVGroup:

 

<?xml version="1.0" encoding="utf-8"?>
<Vgroup:ParentVGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
				   xmlns:s="library://ns.adobe.com/flex/spark" 
				   xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:Vgroup="com.view.Vgroup.*">
	
	<fx:Script>
		<![CDATA[
			override protected function createChildren():void
			{
				var currentMxmlContent:Array = super.mx_internal::getMXMLContent();
				var allMxmlContentArray:Array = mxmlContentArray.concat(currentMxmlContent);
				mxmlContent = allMxmlContentArray;
				super.createChildren();
			}
		]]>
	</fx:Script>
	<s:Button label="tv3"/>
	<s:Button label="tv4"/>
	<s:Button label="tv5"/>
	<s:Button label="tv6"/>
</Vgroup:ParentVGroup>

  ChildVGroup2 和 ChildGroup 一样,只是button的label不一样,以此来区别。

ParentVGroup:

<?xml version="1.0" encoding="utf-8"?>
<s:VGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
		  xmlns:s="library://ns.adobe.com/flex/spark" 
		  xmlns:mx="library://ns.adobe.com/flex/mx">
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			public var mxmlContentArray:Array;//在加载类的时候,第一次会加载Parent的容器的child(例如v1,v2),然后放到这个数组中。
			//在默认的实现当中,如果parent的子类也有child,那么就会覆盖这个数组。所以我们要先把parent的child的保存起来。
			override public function set mxmlContent(value:Array):void
			{
				super.mxmlContent = value;
				if(!mxmlContentArray)
				{
					mxmlContentArray = value;
				}
			}
		]]>
	</fx:Script>
	<s:Button label="v1"/>
	<s:Button label="v2"/>
</s:VGroup>

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    WPF继承_子类继承父类,实现跨类调用方法

    在Windows Presentation Foundation (WPF) 中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性、字段和方法,以便扩展或重写它们。标题“WPF继承_子类继承父类,实现跨类调用方法”表明我们将讨论如何...

    父类统一修改控件值

    标题"父类统一修改控件值"所指出的问题,就是一种通过面向对象编程来提高代码复用性和可维护性的方法。这种做法可以避免在每个窗体类中重复编写相同的代码,降低代码冗余,提高效率。 首先,我们需要创建一个基类...

    javascript控件开发之继承关系

    总的来说,理解并熟练掌握JavaScript的继承机制对于进行控件开发至关重要,它可以帮助我们构建出可扩展、可维护的代码结构,提升代码复用性,从而提高开发效率和应用质量。通过深入学习和实践,开发者可以创建出各种...

    避免用户自定义控件定义的父类多次加载

    在一个asp.net项目中,用户自定义控件是很经常使用的,一个项目中一般都会有多个用户自定义控件,而为了代码重用,通常这些控件都会继承一个父类, 一个页面还会引用多个用户自定义控件。 这种情况如果不注意控制就...

    【Android进阶】(1)用继承和组合方式自定义控件

    - **基础概念**:在Java或Kotlin中,继承允许一个类(子类)继承另一个类(父类)的属性和方法。在Android中,我们可以创建一个新的View或ViewGroup类,使其继承自已有的系统控件,如TextView、Button等。 - **...

    winform泛型类窗体继承解决办法C#小Demo

    当我们使用winform程序时,winform窗体程序和控件程序都是可以通过设计器进行控件拖拽的,但如果我们继承了一个带有泛型的form基类.那么设计器是无法使用的. 这时可以用 MForm先继承BaseForm, 然后FormA : MForm 这样...

    Tcalendar控件,通过继承让Tcalendar当天日期醒目显示

    子类会继承父类的所有属性和方法,并可以添加新的功能或者覆盖已有的方法。在这个场景下,我们将创建一个新的控件类,它是`Tcalendar`的子类,目的是为了突出显示当前日期。 具体实现步骤如下: 1. **创建新的控件...

    C#自定义控件库

    这样可以从父类继承一些基本属性和方法,并添加新的功能。例如,你可以创建一个继承自TextBox的自定义控件,增加自动完成、语法高亮等特性。 2. **绘制控件**:为了实现独特的外观和交互效果,自定义控件可能需要...

    C#中子类调用父类的实现方法

    在C#编程语言中,子类继承父类后,可以访问和使用父类中的成员,包括方法和属性。本文将详细讲解如何在C#中实现子类调用父类的方法。 首先,我们要理解继承的基本概念。在C#中,一个类(子类)可以继承另一个类...

    qt5类继承关系高清图pdf.rar

    在面向对象编程中,类继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。在QT5中,这种继承关系形成了一个庞大的类体系,使得开发者可以利用已有的基础类,快速创建功能丰富的用户界面和应用...

    WPF可继承窗体

    2. **设置IsInitialized属性**: 为了确保子类在初始化时能正确地继承父类的样式,需要在基类的构造函数中设置`InitializeComponent()`方法。此外,如果需要在子类中覆盖或扩展基类的行为,可以重写`OnInitialized`...

    继承窗体的设计C#源码

    子类可以从父类继承属性和字段,也可以添加自己的属性和字段。这有助于封装和管理数据,使代码更加结构化。 5. **接口实现**:在某些情况下,基础窗体类可能实现了特定的接口,如`IResizable`,这要求子类也必须...

    Android自定义控件步骤总结

    我们只需要定义一个类继承于系统 View 类,在 xml 文件中配置 layout 布局文件,重写父类的一些方法,并在程序中应用自定义的 view。这样我们就可以创建一个自定义的控件来满足我们的需求。 Android 自定义控件步骤...

    VB 2010 (18)从子类中引发事件.rar

    在VB 2010中,事件通常由控件或自定义对象生成,然后由事件处理程序接收并处理。事件的发生通常通过声明一个事件变量(如`Event`关键字),然后使用`RaiseEvent`语句来触发。然而,当涉及到继承时,子类并不能直接...

    Delphi自定义控件开发

    - **目的**:从现有的TLabel控件派生一个新的控件TURLLabel,以利用TLabel的所有功能并添加额外的特性。 ##### 2. 修改控件样式 为了模拟超链接的效果,我们需要修改控件的一些基本属性: ```delphi constructor ...

    自定义控件书籍

    为了创建自定义控件,开发者通常会选择继承现有的控件类,并在此基础上添加新的功能。例如,如果想要创建一个带有特殊样式的按钮,可以选择继承 Button 类。 **2.2 实现自定义属性(attr.xml, TypedArray)** - **...

    Delphi--抽象方法、重载、覆盖。继承实例

    在Delphi中,我们使用`class`关键字来定义类,并通过`inherited`关键字来调用父类的方法或属性。继承有助于代码复用和构建类层次结构。例如: ```delphi TBaseClass = class public property BaseProperty: ...

Global site tag (gtag.js) - Google Analytics