Flex 2.0中的组件“模板”(翻译)
来源:互联网 发布:计算机基础考试软件 编辑:程序博客网 时间:2024/05/30 04:32
Flex 2.0中的组件“模板”(翻译)
05月 7th, 2006 — Dreamer本文的英文版是 Peter Ent 写得,本文所有提供下载的东西均来自他那里,原文地址http://weblogs.macromedia.com/pent/archives/2006/03/component_templ.cfm
我看这个挺实用的,所以翻译过来,权当自己教自己。:)
Flex 2.0中的组件“模板”
首先,我明确声明一下:Flex 2.0 是绝对不支持模板的,但是这篇文章将会告诉你一个方法让它看起来好像支持模板一样。
一个“模板”(Templates)不同于一个自定义组件(custom component)。一个模板会定义一些公开的可以被置换的部分。我所认为的模板是纯粹用MXML写的,但是组件可以100%用ActionScript或者用AS和MXML结合来写。Dreamweaver用regions可以实现模板。(译者注:由于对Dreamweaver不了解,这里regions一词不便翻译。)
注:在文章的末尾有一个例子提供下载。
面板(Panel) 模板
假设你想创建一个有固定外观的Panel,并且要在你的应用程序中频繁使用它。可能这个Panel有一个控制栏(ControlBar),控制栏里有两个按钮:“搜索”和“帮助”。你希望这个Panel总是有控制栏和按钮,但是你却想随时改变Panel中的内容。一个叫做SearchPanel.mxml的模板,可以像这样帮你达到目的:
<mx:Panel xmlns:mx=”….” layout=”absolute”>
<mx:Metadata>
[Event("search")]
[Event("help")]
</mx:Metedata>
<!– put children here –>
<mx:ControlBar>
<mx:Button label=”Search” click=”dispatchEvent(new Event(’search’))” />
<mx:Button label=”Help” click=”dispatchEvent(new Event(’help’))” />
</mx:ControlBar>
</mx:Panel>
你可以这样使用它:
<SearchPanel title=”Employee Search” search=”findEmployees()”>
<mx:Form left=”10″ top=”10″ right=”10″ bottom=”10″>
… form items here …
</mx:Form>
</SearchPanel>
如果你现在这样在Flex中实现,将会得到一个编译错误,它会提示你SearchPanel已经有了子组件。你不能从组件外面为它添加更多的子组件。如果你不在SearchPanel中添加控制栏(ControlBar)的话,它将会运行。但是这样的话每个SearchPanel就不会自动有一个控制栏了。
解决办法之一是把它写成一个用ActionScript创建控制栏和按钮的自定义组件。在这里我不会那样做,因为我有更好的办法去实现它。
创建这个“模板”(Templates)
让我们回到SearchPanel.mxml,保持其它部分不变添加下面的脚本代码块:
<mx:Script>
<[[CDATA
private var _components:Array;
public function set subComponents( a:Array ) : void
{
_components = a;
}
private function addComponents() : void
removeAllChildren();
for(var i:int=0; i < _components.length; i++) {
addChild( _components[i] );
}
}
]]>
</mx:Script>
并更改根标签:
<mx:Panel xmlns:mx=”….” layout=”absolute” creationComplete=”addComponents()”>
现在这样在程序中使用:
<SearchPanel title=”Employee Search” search=”findEmployees()”>
<subComponents>
<mx:Form left=”10″ top=”10″ right=”10″ bottom=”10″>
… form items here
</mx:Form>
</subComponents>
</SearchPanel>
注意这个表单,或者其它你想要添加到面板中的子组件,都是在<subComponents>属性中定义的。在这个SearchPanel的脚本代码中,subComponents是一个接收数组的 set 方法。这个数组可以是在MXML定义的一个或者多个组件。在这个例子中,这个数组是一个<mx:Form>。注意哪个简单的循环(就是脚本中那个addComponents方法。译者注。),它把数组中的每个元素添加到Panel中。
现在你已经有了一个“模板”了!
默认属性(Default Property)
但是请等一下——还有更多。这确实是一个很酷的部分。让我们重新回到SearchPanel.mxml,把下面的一行代码添加到 <mx:Metadata> 中 [Event("help")] 的后面:
[DefaultProperty("subComponents")]
现在轻微改变一下主程序:把<subComponents>去掉:
<SearchPanel title=”Employee Search” search=”findEmployees()”>
<mx:Form left=”10″ top=”10″ right=”10″ bottom=”10″>
… form items here
</mx:Form>
</SearchPanel>
注意把<subComponents>去掉之后它现在看起来像一个真正的容器(Container)了。因为有了DefaultProperty这个元数据(metadata),它也能顺利运行。你把SearchPanel的默认属性设置成了 “subComponents”,它可以自动把<mx:Form>放到子组件数组里。
总结
虽然在Flex中不支持真正的模板,但是你可以很漂亮地做到让它看起来好像支持一样。因为Flex2.0种创建组件的方法(用new 运算符)和DefaultProperty元数据使做到它变为可能。
范例下载
这个例子和上面描述的这个很像。在这个例子中,组件是一个被Canvas封装的Panel。这样做可以使最大化和最小化按钮“浮在”Panel 的标题栏上。
下载文件
分享收藏
本文链接:http://www.zhuoqun.net/html/y2006/37.html 转载请注明出处,谢谢。
TrackBack引用地址:http://www.zhuoqun.net/html/y2006/37.html/trackba
- Flex 2.0中的组件“模板”(翻译)
- Flex组件:模板组件
- flex学习----flex中的封装(组件)
- Flex中的Repeater组件出错(二)
- flex中的DataGrid组件
- flex中的DataGrid组件
- Actionscript 3.0/Flex 2中的反射(翻译,转贴)
- Flex中的组件事件顺序
- flex中的分割组件(DividedBox)
- Flex中的组件事件顺序
- 【翻译】如何让flex组件看起来更美观
- Flex中的组件mx.controls.NumericStepper
- 在模板中的locale添加翻译文件
- Dreamer的FLEX教程翻译:设计松耦合的Flex组件
- Flex 调用父组件的父组件中的方法
- Flex组件出错(一)
- Flex组件
- Flex组件
- 锐拜:CSS实现圆角矩形之函数版
- 为MFC程序添加控制台窗口
- 如何取得GridView被隐藏列的值
- 面向对象设计中的原则
- 面向对象的设计原则三 - 接口隔离原则
- Flex 2.0中的组件“模板”(翻译)
- linux c++ MD5
- 未来6年,DBA需求将激增约三成
- 无语的长城
- Linux Concept
- 听力笔记Peoples in America 010-Douglas MacArthur 麦克阿瑟
- SWT(JFace)体验之UI.FORMS包
- 用数据说话,看Google 怎样被陷害(转)
- 用数据说话,看Google 怎样被陷害