java addelement_addElement(),addChild()区别

论坛 期权论坛     
选择匿名的用户   2021-5-30 01:39   218   0
<div style="font-size:16px;">
<p>1.addElement(),addChild()区别</p>
<p>在网上找了很多,差不多都是这么说的:如果是spark(如s:Group)容器,用addElement。如果是halo(如mx:HBox)容器,就用addChild。这样说没有错,addChild是Flex3中用来添加组件的方法,所以对于halo容器使用addChild方法是没问题的。Flex4中spark容器只能使用addElement,如果使用addChild会报错,不管要添加的是spark还是halo组件。其实只要是在Flex4下开发,halo容器也是可以使用addElement方法的,虽然不知道内部怎么实现的,但确实可行。现在我们可以忘掉addChild方法了,只要是在Flex4下开发,我们都可以用addElement,世界是不是美好了很多。</p>
<p>2.引用图片资源时,使用&#64;Embed与不用Embed的区别</p>
<p>与区别在于后者在编译时会把图片资源编译到swf文件中,前者不会,运行时会去外部加载图片信息,好像在as脚本里动态指定图片资源时只能用Embed。Embed详细用法请参考我的收藏:http://yecon.blog.hexun.com/29628260_d.html和http://xiejiangbo.iteye.com/blog/446122</p>
<p>3.ROLL_OVER与MOUSE_OVER,ROLL_OUT与MOUSE_OUT区别</p>
<p>可视组件在鼠标进入该组件时会调度MOUSE_OVER事件,即使是从其子组件移到该组件依然会触发该事件。可视组件在鼠标从不是其子组件的其余组件中进入该组件时会调度ROLL_OVER事件,直观来看,就是鼠标从外部移入该组件才调用。</p>
<p>可视组件在鼠标进入该组件时会调度MOUSE_OVER事件,即使是从其子组件移到该组件依然会触发该事件。可视组件在鼠标从不是其子组件的其余组件中进入该组件时会调度ROLL_OVER事件,直观来看,就是鼠标从外部移入该组件才调用。</p>
<p>MOUSE事件与ROLL事件的区别在于如下两点:鼠标在母组件与子组件上移入移出时是否调度的区别。 MOUSE事件具有冒泡阶段而ROLL事件没有,决定了在子组件调度事件时母组件是否能监听到的区别。 总之,ROLL事件将整个母组件包括其子组件看成一个组件,移入移出整个组件的边界时母组件才调度事件并能监听该事件。</p>
<p>4.使用MouseEvent 获取鼠标位置</p>
<p>localX和localY:这两个属性保存鼠标事件发生时,鼠标指针相对于父容器的水平和垂直坐标</p>
<p>stageX和stageY:这两个属性保存鼠标事件发生时,鼠标指针在全局窗口中的水平和垂直坐标</p>
<p>5.通过id引用组件注意</p>
<p>我们在使用组件时一般会给组件设id值,然后通过该id就可以在as代码中使用该组件了,如果as代码和组件在同一个文件中没有问题,如果不在同一个文件,并且是通过addElement()方法加入容器的,可能会有问题。</p>
<p>Test.mxml:</p>
<p></p>
<p>xmlns:s&#61;&#34;library://ns.adobe.com/flex/spark&#34;</p>
<p>xmlns:mx&#61;&#34;library://ns.adobe.com/flex/mx&#34;&gt;</p>
<p>// 在另一文件中引用</p>
<p>vart:Test &#61;newTest();</p>
<p>trace(&#34;addElement前:&#34;&#43; t.b1);// 打印结果为null</p>
<p>this.addElement(t);</p>
<p>trace(&#34;addElement后:&#34;&#43; t.b1);// 正常</p>
<p>Test.mxml: &lt;?xml version&#61;&#34;1.0&#34; encoding&#61;&#34;utf-8&#34;?&gt; // 在另一文件中引用 var t:Test &#61; new Test(); trace(&#34;addElement前:&#34; &#43; t.b1); // 打印结果为null this.addElement(t); trace(&#34;addElement后:&#34; &#43; t.b1); // 正常</p>
<p>经测试,如果被引用的组件是继承自Group,则不会出现以上情况,即不addElement到当前容器也可以使用,但Panel,Canvas等其他容器不行,所以在遇到上面的情况时,先通过addElement加入组件,然后再使用即可。</p>
<p>6.Flex反射简单实现方式</p>
<p>flex反射机制是比较复杂的,下面是在开发中遇到的情况,根据类名生成类的对象,这样可以用以下简单方法实现:</p>
<p>varclassRefrence:Class &#61; getDefinitionByName(className) as Class;</p>
<p>varclassInstance:IPerson &#61;newclassRefrence() as IPerson;</p>
<p>var classRefrence:Class &#61; getDefinitionByName(className) as Class;</p>
<p>var classInstance:IPerson &#61; new classRefrence() as IPerson;</p>
<p>但需注意getDefinitionByName方法获得的类必须是在发布的时候被编译到swf文中的,否则就会报错:&#34;ReferenceError: Error #1065: 变量 未定义。&#34;</p>
<p>7.Flex使用正则表达式验证日期</p>
<p>// 定义验证日期的正则表达式</p>
<p>var dateReg:RegExp &#61; /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;</p>
<p>if (dateField.text !&#61; null &amp;&amp; dateField.text !&#61; &#34;&#34;) {<!-- --></p>
<p>if (!dateReg.test(dateField.text)) {<!-- --></p>
<p>Alert.show(&#34;时间输入错误&#34;);</p>
<p>return;</
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP