使用Flex 为多用户创建不同的界面
09月 28th, 2006 — Dreamer这两天做程序的时候尝试了如何用Flex为不同身份的用户显示不同的页面。我这个东西的用户有两种可能的身份:老师和学生。那么如何让他们登录之后看到的页面不一样呢? 全部用ActionScript动态创建是一个办法。不过我的ActionScript没有那么厉害,而且全部动态无法使用设计视图预览页面。怎么办呢?正统的不会可以投机取巧:)
Flex中的所有容器都继承自 Container 类,Container类又继承自 UIComponent……具体继承关系请参考帮助文档吧。这里要说的就是 Container 类中有几个比较好用的方法:addChild(),addChildAt() 以及 removeChild(),removeChildAt(),removeAllChildren()。
如果想要为不同的用户显示不同的试图,首先我们可以把所有用户的视图全部建立,然后根据用户登录的状态判断一下用户身份,把与用户无关的视图全部用 removeChild 删除。注意一下,removeChild() 方法的参数必须是DisplayObject 子类的实例。可视组件都是这个类的实例,所以你大可以放心的删除。而且删除的时候注意一下,只能调用被删除组件的父容器的 removeChild() 方法,不然就会出错。例如:
<mx:VBox id="v2">
<mx:Label id = "label1">
</mx:VBox>
</mx:VBox>
如果想删除 label1 ,就只能用ActionScript这样写“ v2.removeChild(label1)”。这里提醒大家一下,这里的删除容器不是彻底把该容器销毁了,而只是把这个容器从显示列表中移除了,它其实还是存在的,只是它的 parent 属性被设定成了 null ,以后你还是可以把它添加到显示列表中来让它重新显示的,而且它会保留被删除前的状态。
本文链接: http://www.zhuoqun.net/html/y2006/249.html 转载请注明出处,谢谢。
TrackBack引用地址:http://www.zhuoqun.net/html/y2006/249.html/trackback








实现起来和state差不多啊…
这样写有什么优势吗?
或者还是将来实现一个老师类一个学生类,根据身份不同实现不同的界面?
to 猫粮:我这么写主要是因为自己功力不够,所以投机取巧。这么做的优势就是简单。我觉得最好的实现方法就是用ActionScript动态创建页面,然后把一些子组件组装起来,当然,用state也可以,不过写 state 的时候很多addChild,removeChild,我个人认为那个不太容易控制。那么做就傻瓜多了,把页面都建立了,该删除的删除……以后我慢慢改进。
其实用state就可以了。
Store的例子说明Adobe建议用state
我也建議用state來作,
state的在處理UI介面的好處,方便性及彈性比較多,
我想你可能比較少操作Design模式,
不妨試著在Design模式中建立幾個階層式的states,
然後在不同的states的畫面中增減各種component,
及修改其properties,
並建幾個button來切換states,
之後看看其生成的mxml和swf,
或許可以給你在ui設計上有些不同idea.
谢谢各位提的建议。