使用Flex 为多用户创建不同的界面

这两天做程序的时候尝试了如何用Flex为不同身份的用户显示不同的页面。我这个东西的用户有两种可能的身份:老师和学生。那么如何让他们登录之后看到的页面不一样呢? 全部用ActionScript动态创建是一个办法。不过我的ActionScript没有那么厉害,而且全部动态无法使用设计视图预览页面。怎么办呢?正统的不会可以投机取巧:)

Flex中的所有容器都继承自 Container 类,Container类又继承自 UIComponent……具体继承关系请参考帮助文档吧。这里要说的就是 Container 类中有几个比较好用的方法:addChild(),addChildAt() 以及 removeChild(),removeChildAt(),removeAllChildren()。

如果想要为不同的用户显示不同的试图,首先我们可以把所有用户的视图全部建立,然后根据用户登录的状态判断一下用户身份,把与用户无关的视图全部用 removeChild 删除。注意一下,removeChild() 方法的参数必须是DisplayObject 子类的实例。可视组件都是这个类的实例,所以你大可以放心的删除。而且删除的时候注意一下,只能调用被删除组件的父容器的 removeChild() 方法,不然就会出错。例如:

<mx:VBox id=&#34;v1&#34;>
<mx:VBox id=&#34;v2&#34;>
<mx:Label id = &#34;label1&#34;>
</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

相关日志


Posted in 技术.

5条评论

  • At 2006.09.28 20:57, 猫粮 CHINA said:

    实现起来和state差不多啊…
    这样写有什么优势吗?
    或者还是将来实现一个老师类一个学生类,根据身份不同实现不同的界面?

    • At 2006.09.28 21:51, Dreamer CHINA said:

      to 猫粮:我这么写主要是因为自己功力不够,所以投机取巧。这么做的优势就是简单。我觉得最好的实现方法就是用ActionScript动态创建页面,然后把一些子组件组装起来,当然,用state也可以,不过写 state 的时候很多addChild,removeChild,我个人认为那个不太容易控制。那么做就傻瓜多了,把页面都建立了,该删除的删除……以后我慢慢改进。

      • At 2006.10.01 19:08, slobber CHINA said:

        其实用state就可以了。
        Store的例子说明Adobe建议用state

        • At 2006.10.04 01:43, hiso TAIWAN said:

          我也建議用state來作,
          state的在處理UI介面的好處,方便性及彈性比較多,
          我想你可能比較少操作Design模式,
          不妨試著在Design模式中建立幾個階層式的states,
          然後在不同的states的畫面中增減各種component,
          及修改其properties,
          並建幾個button來切換states,

          之後看看其生成的mxml和swf,
          或許可以給你在ui設計上有些不同idea.

          • At 2006.10.04 09:32, Dreamer CHINA said:

            谢谢各位提的建议。

            (Required)
            (Required, will not be published)