Flex - ResizeEvent.RESIZE的问题

And*_*ano 9 apache-flex events resize

我的调整大小事件有点问题...我自己创建了一个组件,这个组件在每个resize事件中运行一个复杂的方法.这是问题:当我最大化或恢复我的窗口时,这个事件在很短的时间内被调用了好几次,没有让我的方法有足够的时间在另一个开始之前完全运行...我想知道如果无论如何只在每次调整大小运动结束时运行此方法.谢谢

小智 20

而不是对ResizeEvent做出反应,ResizeEvent将在调整大小期间触发每一帧(即如果你点击最大化并且组件需要3帧从widh/ehight = 0重绘到width/height = MaxValue)那么resize事件将触发三次,你可以"观察"宽度和高度的属性.

var widthWatch:ChangeWatcher = ChangeWatcher.watch(this, 'widht', resizeHandler)
var heightWatch:ChangeWatcher = ChangeWatcher.watch(this, 'height' resizeHandler)
Run Code Online (Sandbox Code Playgroud)

实际上,这将跟踪属性,类似于数据绑定,并在宽度或高度发生变化时执行resizeHandler.如果宽度和高度同时发生变化,这会导致两次触发处理程序有一点点缺点,但这可以通过执行工作的第三个函数来解决,如果没有调度计划,则由处理程序调用.代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete(event)">
<mx:Script>
 <![CDATA[
  import mx.binding.utils.ChangeWatcher;

  private var widthWatch:ChangeWatcher;
  private var heightWatch:ChangeWatcher;
  private var resizeExecuting:Boolean = false;

  private function onCreationComplete(event:Event):void
  {
   widthWatch = ChangeWatcher.watch(this,'width',onSizeChange);
   heightWatch = ChangeWatcher.watch(this,'height',onSizeChange);
  }

  private function onSizeChange(event:Event):void
  {
   if(!resizeExecuting)
    callLater(handleResize);
   resizeExecuting = true;
  }

  private function handleResize():void
  {
   //do expensive work here
   resizeExecuting = false;
  }

  private function stopWatching()
  {
   //invoke this to stop watching the properties and prevent the handleResize method from executing
   widthWatch.unwatch();
   heightWatch.unwatch();
  }

 ]]>
</mx:Script>
</mx:Application>
Run Code Online (Sandbox Code Playgroud)

我更喜欢更改观察器方法,因为它在宽度和高度属性发生更改后触发,而不像在更新宽度和高度属性之前触发的调整大小事件.