利用Cairngorm框架,页面间导航使用NavigationEvent函数,但是这个导航函数只能接受导航的页面类的字符串,而参数如何传递呢?有人说这个可以再发一个事件,然后把数据放在事件中,也有人说可以做一个全局的变量,切换前进行设置,然后在切换后的页面使用。但是无论怎样,都会有一个问题:页面切换和参数事件,页面切换和全局变量之间的先后顺序。如果页面没有切换完,页面还没有初始化,它怎么监听参数事件;如果页面已经切换完成,但是全局变量还没来得及变化,那么页面的上的数据肯定不是当前的。
Flex中的绑定机制,给了我们解决问题的答案。
这里选择第二种方案,利用全局变量传值。在跳转后的页面加一个属性变化的监听器。
use namespace UFAF_internal; override UFAF_internal function set view(value:DisplayObject):void { super.UFAF_internal::view = value; init(); }
private function init():void { ChangeWatcher.watch(model,"executeId",ChangedHandler); } private function ChangedHandler( event:PropertyChangeEvent ):void { var civ:EnrollmentDetailView = enrollmentDetailView; if(model.executeId){ civ.executeId = model.executeId; } }
注意:
一是这个监听必须在页面实例创建的时候,而不是页面已经加载的时候;
二是在处理函数中,不能操作页面的元素,因为页面还没完成初始化呢。