• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>Flex>文章内容
  • flex 初始化完成前加载自定义XML数据
  • 来源:冰山上的播客 作者:GgNET 2008-07-25 【


在写FLEX应用,从外部加载配置文件是一个很常用的方法

如何让SWF在配置文件加载完成之前开始工作呢?
有两种方法,
一种是直接控制所有子元件的表现,在配置文件加载完毕之前不做任务动作。
但这意味着每加一个子元件你就要加一定的额外的脚本来侦听配置加载是否完成。
另一种是在FLEX主MXML的CreationComplete事件前完成一些配置工作,这需要我们自定义loading类 (preloader),下面是我的一个课程设计中的例子,preloader参考了flex cookbook的例子:

OBSPreLoader.as (OBS= Online Book Store…)

  1. package iptton.utils{
  2. import com.adobe.cairngorm.control.CairngormEventDispatcher;
  3. import flash.display.Shape;
  4. import flash.display.Sprite;
  5. import flash.events.Event;
  6. import flash.events.ProgressEvent;
  7. import flash.text.TextField;
  8. import flash.text.TextFormat;
  9. import iptton.events.*;
  10. import mx.events.FlexEvent;
  11. import mx.preloaders.IPreloaderDisplay;
  12. import mx.preloaders.Preloader;
  13. public class OBSPreloader extends Sprite implements IPreloaderDisplay
  14. {
  15. private var _bgAlpha:Number;
  16. private var _bgColor:uint;
  17. private var _bgImage:Object;
  18. private var _bgSize:String;
  19. private var _stageHeight:Number;
  20. private var _stageWidth:Number;
  21. private var _preloader:Preloader;
  22. private var _downloadBar:Shape;
  23. private var _initBar:Shape;
  24. private var _initField:TextField;
  25. public function OBSPreloader()
  26. {   _initField = new TextField()
  27. _initField.defaultTextFormat => new TextFormat( ‘Arial’, 12, 0xFFFFFF, true );
  28. _downloadBar = new Shape();
  29. addChild( _downloadBar );
  30. _initBar = new Shape();
  31. addChild( _initBar );
  32. }
  33. // initialize any properties on display.
  34. public function initialize():void
  35. {
  36. _downloadBar.x = ( _stageWidth / 2 ) - 20;
  37. _initBar.x = _downloadBar.x - 2;
  38. _downloadBar.y = ( _stageHeight / 2 ) - 50;
  39. _initBar.y = _downloadBar.y;
  40. _initField.x = _initBar.x + 2;
  41. _initField.y = _initBar.y + 100 - 15;
  42. _initField.width=400;
  43. addChild( _initField );
  44. }
  45. // define event handlers of the Preloader instance
  46. public function set preloader( obj:Sprite ):void
  47. {
  48. _preloader = obj as Preloader;
  49. _preloader.addEventListener( ProgressEvent.PROGRESS,
  50. downloadProgressHandler );
  51. _preloader.addEventListener( FlexEvent.INIT_PROGRESS,
  52. initProgressHandler );
  53. _preloader.addEventListener( FlexEvent.INIT_COMPLETE,
  54. initCompleteHandler );
  55. }
  56. public function get backgroundAlpha():Number
  57. {
  58. return _bgAlpha;
  59. }
  60. public function set backgroundAlpha(value:Number):void
  61. {
  62. _bgAlpha = value;
  63. }
  64. public function get backgroundColor():uint
  65. {
  66. return _bgColor;
  67. }
  68. public function set backgroundColor(value:uint):void
  69. {
  70. _bgColor = value;
  71. }
  72. public function get backgroundImage():Object
  73. {
  74. return _bgImage;
  75. }
  76. public function set backgroundImage(value:Object):void
  77. {
  78. _bgImage = value;
  79. }
  80. public function get backgroundSize():String
  81. {
  82. return _bgSize;
  83. }
  84. public function set backgroundSize(value:String):void
  85. {
  86. _bgSize = value;
  87. }
  88. public function get stageHeight():Number
  89. {
  90. return _stageHeight;
  91. }
  92. public function set stageHeight(value:Number):void
  93. {
  94. _stageHeight = value;
  95. }
  96. public function get stageWidth():Number
  97. {
  98. return _stageWidth;
  99. }
  100. public function set stageWidth(value:Number):void
  101. {
  102. _stageWidth = value;
  103. }
  104. //=========temp==
  105. public function setLabel(s:String):void
  106. {
  107. _initField.text=s;
  108. }


  109. // handle SWF file download progress.
  110. private function downloadProgressHandler( evt:ProgressEvent ):void
  111. {
  112. var perc:Number = ( ( evt.bytesLoaded / evt.bytesTotal ) * 100 );
  113. var top:Number = 100 - perc;
  114. _downloadBar.graphics.clear();
  115. _downloadBar.graphics.beginFill( 0xFF0000, 1 );
  116. _downloadBar.graphics.moveTo( 0, 0 );
  117. _downloadBar.graphics.lineTo( 10, 0 );
  118. _downloadBar.graphics.lineTo( 10, perc * 0.9 );
  119. _downloadBar.graphics.lineTo( 0, perc * 0.9 );
  120. _downloadBar.graphics.lineTo( 0, 0 );
  121. _downloadBar.graphics.endFill();
  122.  
  123. _initBar.graphics.clear();
  124. _initBar.graphics.beginFill( 0xFFFFFF, 1 );
  125. _initBar.graphics.moveTo( 0, 100 );
  126. _initBar.graphics.lineTo( 2, 100 );
  127. _initBar.graphics.lineTo( 2, top );
  128. _initBar.graphics.lineTo( 0, top );
  129. _initBar.graphics.lineTo( 0, 100 );
  130. _initBar.graphics.endFill();
  131. setLabel(perc+” %loaded (”+evt.bytesLoaded + ” / ” + evt.bytesTotal +”)”);
  132. }
  133. // handle application initialization progress.
  134. private function initProgressHandler( evt:FlexEvent ):void
  135. {
  136. _initField.text = ” 正在初始化…”;
  137. }
  138. // handle completion of download and initialization.
  139. private function initCompleteHandler( evt:FlexEvent ):void
  140. {
  141. new SystemConfig(this);
  142. }
  143. public function notifyOfConfigLoaded(o:Object):void
  144. {
  145. /*
  146. var timer:Timer = new Timer( 3000, 1 );
  147. timer.addEventListener( TimerEvent.TIMER_COMPLETE, notifyOfComplete );
  148. timer.start();
  149. */
  150. dispatchEvent( new Event( Event.COMPLETE ) );
  151. var ced:CairngormEventDispatcher=CairngormEventDispatcher.getInstance();
  152. ced.dispatchEvent( new SystemEvent(SystemEvent.INITAL,o));
  153. }
  154. }
  155. }
  1. package iptton.utils{
  2. import flash.display.*;
  3. import flash.events.*;
  4. import flash.net.*;
  5. import flash.utils.*;
  6. /**
  7. * 获取系统配置内容
  8. *
  9. * =============================
  10. * 配置文件格式:
  11. * <config>
  12. *  <property name=”amfphpGatewayUrl” value=”http://localhost/amfphp/gateway.php”>
  13. *  <property name=”…” value=”…”>
  14. *  …
  15. * <config>
  16. * =============================
  17. * */
  18. public class SystemConfig{
  19. private var _parent:OBSPreloader;
  20. /**
  21. * 返回给callback的参数为一个对象
  22. *
  23. * 内容有:
  24. *      amfphpGatewayUrl:String
  25. **/
  26. public function SystemConfig(parent:OBSPreloader,configUrl:String=“swfConfig.xml”){
  27. _parent=parent;
  28. var loader:URLLoader = new URLLoader();
  29. var req:URLRequest = new URLRequest(configUrl);
  30. loader.load(req);
  31. loader.addEventListener(Event.COMPLETE,onResult);
  32. loader.addEventListener(ProgressEvent.PROGRESS,progressing);
  33. _parent.setLabel(“正在加载配置文件…”);
  34. }
  35. protected function progressing(event:ProgressEvent):void{
  36. _parent.setLabel(100*event.bytesLoaded/event.bytesTotal+“ %loaded (”+event.bytesLoaded + “ / ” + event.bytesTotal +“)”);
  37. }
  38. protected function onResult(event:Event):void{
  39. _parent.setLabel(“配置文件加载完毕…”);
  40. var xmlobj:XML = new XML(event.target.data);
  41. var ret:Object=new Object();
  42. var tmp:XMLList=xmlobj.property;
  43. for each(var node:XML in tmp){
  44. _parent.setLabel(“正在设置: ”+node.@name+“ : ”+node.@value+“…”);
  45. ret[node.@name]=node.@value;
  46. }
  47. _parent.notifyOfConfigLoaded(ret);
  48. }
  49. }
  50. }</config></property></property></config>



上一篇:利用Flex 和 PHP 生产 PDF   下一篇:Flex 4 Gumbo API 手册
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)