在swgis的flex应用框架内对于实时监控和回放界面使用stackview进行布局
1 <mx:ViewStack id="viewstack1" width="100%" height="100%" creationPolicy="all">
2 <s:NavigatorContent label="实时监控" width="100%" height="100%" id="GisRealView">
3 <s:layout>
4 <s:VerticalLayout/>
5 </s:layout>
6 <ns1:PaneGisRealView width="100%" height="100%">
7 <ns1:layout>
8 <s:VerticalLayout/>
9 </ns1:layout>
10 </ns1:PaneGisRealView>
11 </s:NavigatorContent>
12 <s:NavigatorContent label="历史回放" width="100%" height="100%" id="GisReplayView">
13 <s:layout>
14 <s:VerticalLayout/>
15 </s:layout>
16 <ns1:PaneGisReplayView height="100%" width="100%"/>
17 </s:NavigatorContent>
18
19 </mx:ViewStack>
stackview我通常习惯的设置为
creationPolicy="all" ,因为这样的话stackview在初始化的时候将内部的所有 NavigatorContent都将进行初始化实例,如果不设置
creationPolicy的话,flex将在用户切换NavigatorConent时创建实例(lazy create).
这本是个简单而且方便的设置行为,没想到在第一个view1的地图内显示feature位置都是okay的,但是切换到第二个view2的地图显示feature,发现feature对应的位置在x方向上都做了偏移。
view1.map显示linestring feature:
view2.map显示的linestring feature:
相同的linestring在两个map上显示居然位置产生了偏移,这个问题困扰了一整天和一个晚上,苦思不得其解,采用排斥法,切换view1,view2在stackview中排布次序,居然view2显示就正常了。
然后就联想到了createPolicy这个属性了,一切还原,去除这个属性(默认:lazy create),跑一下居然好了!
奇怪奇怪,没时间具体去研究这个属性在flex里面的实现机制了,就这样吧!