【永恒的瞬间】
☜Give me hapy ☞
页面跳转的实现

Application xmlns:mx="http://www.macromedia.com/2003/mxml">
  <mx:Script>
  <![CDATA[
    var url:String = "employee.mxml.swf"
 function modifyURL()
 {
  url = "corporation.mxml.swf";
 }
  ]]>
  </mx:Script>
  <mx:VBox label="Sample" minWidth="0" minHeight="0" width="100%" height="100%" marginTop="8" marginLeft="8">
 <mx:Loader id="loader" contentPath="{url}" scaleContent="false" showBusyCursor="true"/>
  </mx:VBox>
  <mx:Button label="Button" click="modifyURL()" />
</mx:Application>

这就是我写的测试例程,三个文件:index.mxml,employee.mxml,corporation.mxml放在web应用的根目录下就可以了,上面的代码是index.mxml的代码。其余两个文件写什么就随便了,只要不是错的。图片点击可在新窗口打开查看

在上面我介绍了使用Loader组件动态加载Flex页面的方法,但是后来发现加载的页面只能在很小的一个范围内显示,无论怎么设定Loader的参数都没有效果,这个问题今天终于搞明白了,下面做一下说明。

  要想让动态加载进来的页面满屏显示,不但要设定container和Loader组件的长度和宽度的参数,还要设定加载进来的swf的长度和宽度的参数。加载进来的swf存放在Loader组件的content属性里面,当Loader组件加载完毕会触发它自己的complete事件,在该事件中我们调整一下swf的长宽参数即可,关键代码如下:

function initSwf()
{
    loader.content.width="2000";
    loader.content.height="2000";
}

<mx:Loader id="loader" width="100%" height="100%" contentPath="{url}" scaleContent="false" showBusyCursor="true" complete="initSwf()"/>

弹出窗口的实现以及子父窗口的数据交换

Flex里使用PopUpManager.createPopUp(parent, class, modal [, initobj, outsideEvents])创建父一个子窗口,该函数的参数说明如下:
parent 一个引用,引用弹出窗口所在的窗口。
class 一个引用,引用要创建的对象的类。
modal 一个布尔值,它表明该窗口是 (true) 否 (false) 是模式的。
initobj  一个包含初始化属性的对象。此参数是可选的。
outsideEvents  一个布尔值,指明在用户单击窗口以外的区域时是 (true) 否 (false) 触发事件。此参数是可选的。
其中,前三个参数是必须的,后两个是可选的。第二个参数要和你的mxml文件名一致,第三个参数如果选择是则不允许弹出窗口没关闭前操作父窗口,反之则允许。

  首先我们创建一个页面,关键代码如下:
<mx:Button label="Show Window" click="showWindow(false)" width="150"/>
<mx:Button label="Show Modal Window" click="showWindow(true)" width="150"/>
function showWindow(modal)
{
    var popup = mx.managers.PopUpManager.createPopUp(_root , login , modal, {deferred: true});
}

  然后我们创建一个TitleWindow,注意虽然也是mxml文件,但是它的定级元素不是Application而是TitleWindow,其余的地方和以前没什么两样了。

  下面介绍子父窗口的数据交换。

  当子窗口被创建的时候父窗口就获得了一个子窗口的实例,注意我用红子标出的变量。我们可以用该变量引用子窗口内定义的全局变量,例如我在子窗口中做如下定义:var name:String = "哈哈";。在父窗口中可以使用popup.name引用该变量。

  同样,在子窗口中我们可以使用"parent"来引用父窗口中定义的变量,例如我在父窗口中定义var age:String="24";。在子窗口中可以使用parent.age引用这个变量。

日期控件的本地化和输入的格式化

Flex里的日期输入控件默认月份的显示是英文的,偶的英文很一般,就知道那十二个单词代表月份,具体是哪个月,要数一下,最近的项目又是对公网用户服务,什么年龄段的都有,如果让50岁的人看英文,那结果我都不感想了。

  查阅了Flex的开发文档,发现修改控件的monthNames属性就能解决这个问题,这个属性是个数组,我们做一下的修改。首先在脚本里定义一个数组:var month:Array = new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");然后我们可以这样使用控件:<mx:DateField width="180" monthNames="{month}" />,这样日期就变成了中文。

  日期数据的格式化和上面的做法类似,首先定义格式化函数:
 function formatDate(date:Date):String
 {
  return date.getUTCFullYear() + "-" + ( date.getUTCMonth() + 1 ) + "-" + ( date.getUTCDate() + 1 );
 }
日期控件我们就这样写:<mx:DateField width="180" dateFormatter="formatDate" />

  为了方便使用,可以把这个做成自定义组件



posted on 2007-02-10 12:54 ☜♥☞MengChuChen 阅读(795) 评论(0)  编辑  收藏 所属分类: flex2.0

只有注册用户登录后才能发表评论。


网站导航: