`
piperzero
  • 浏览: 3463964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Flex开发常遇问题

 
阅读更多

更新:原来文章标题是Flex的一些零碎知识点。

Flex的一些零碎知识点,我是个flex初学者,很多知识点可能很幼稚,但是都是我学习和开发过程中遇到的问题。

1.组件的样式属性不可以用BindingUtils绑定。

2.null值可以被绑定。

3.在as中为组件添加事件监听器调用的函数默认应该带Event参数。

4.在as中给事件监听器的调用函数传递参数可以使用匿名函数,如下:

moveUp.addEventListener(MouseEvent.CLICK, 
    function (event:MouseEvent):void
    {
        moveData("up");
    }
);
5. 单例模式:flex中的构造器不能像java中那样private,所以它的单例模式是在类文件中创建一个类,将这个类作为主类构造器的参数,如下:

package
{
	public class ModelLocator
	{
		private static var _instance:ModelLocator;
		// 这里修改过,原来的单例构造器没有封死,假如外界传入null值的话,还可以创建本类的对象。
		public function ModelLocator(singleton:SingletonEnforcer) 
		{
		    if(singleton == null)// 处理null值
		    {
		        throw new Error("Create instance error!");
		    }
		}		
		public static function getInstance():ModelLocator
		{
			if(_instance != null) 
			{
				_instance = new ModelLocator(new SingletonEnforcer);
			}
		}
	}
}
class SingletonEnforcer{}

6. 在jsp页面中引入swf,用flashvars定义的对象,可以在flex端通过FlexGlobals.topLevelApplication.parameters.server.属性名 来取到对象的属性值。

7. 使用remoteObject方式请求数据时,flex端的vo对象像java端的vo对象一样封装,对象就可以直接转化。

8. 可以使用组件的parentApplication属性得到主应用程序窗体。

9. 可以通过组件的localToGlobal方法在整个应用中定位自己的绝对位置,如下:

//exportSelected是一个按钮
var p:Point = exportSelected.localToGlobal(new Point(exportSelected.x, exportSelected.y));
Alert.show("(" + p.x + "," + p.y +")");
10. flex中的拖拽,分几步:

1) 在源组件上定义mouseDown事件,触发如下函数:

private static function mouseDownHandler(event:MouseEvent):void 
			{  
				var dragInitiator:UIComponent = UIComponent(event.currentTarget); 
				var ds:DragSource = new DragSource(); 
				ds.addData(dragInitiator, "myRule");
				DragManager.doDrag(dragInitiator, ds, event); 
			}
2) 在目标组件上定义dragEnterdragDrop事件,触发如下函数:

private static function dragEnterHandler(event:DragEvent):void 
			{ 
				if (event.dragSource.hasFormat("myRule")) 
				{ 
					DragManager.acceptDragDrop(UIComponent(event.currentTarget)); 
				} 
			} 
			
private static function dragDropHandler(event:DragEvent):void 
			{ 
				var dragObject:UIComponent = UIComponent(event.dragInitiator); 
				Panel(event.currentTarget).addElement(dragObject);
			} 
这样就可以在本身不带拖拽功能的组件上实现拖拽了。

组合代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   creationComplete="init()">
	<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.core.Container;
			import mx.core.DragSource;
			import mx.core.UIComponent;
			import mx.events.DragEvent;
			import mx.managers.DragManager; 
			private function init():void 
			{
				for(var i:int  = 0; i < b.numElements; i++)
				{
					b.getElementAt(i).addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
				}
				b.addEventListener(DragEvent.DRAG_ENTER, dragEnterHandler); 
				b.addEventListener(DragEvent.DRAG_DROP, dragDropHandler);  
				c.addEventListener(DragEvent.DRAG_ENTER, dragEnterHandler); 
				c.addEventListener(DragEvent.DRAG_DROP, dragDropHandler); 
			} 			
			private static function mouseDownHandler(event:MouseEvent):void 
			{  
				var dragInitiator:UIComponent = UIComponent(event.currentTarget); 
				var ds:DragSource = new DragSource(); 
				ds.addData(dragInitiator, "myRule");
				DragManager.doDrag(dragInitiator, ds, event); 
			} 			
			private static function dragEnterHandler(event:DragEvent):void 
			{ 
				if (event.dragSource.hasFormat("myRule")) 
				{ 
					DragManager.acceptDragDrop(UIComponent(event.currentTarget)); 
				} 
			} 			
			private static function dragDropHandler(event:DragEvent):void 
			{ 
				var dragObject:UIComponent = UIComponent(event.dragInitiator); 
				Panel(event.currentTarget).addElement(dragObject);
			} 
		]]>
	</fx:Script>
	<s:Panel id="b" x="57" y="46" width="250" height="200">
		<s:layout>
			<s:TileLayout/>
		</s:layout>
		<s:Button label="1"/>
		<s:Button label="2"/>
		<s:Button label="3"/>
		<s:Button label="4"/>
		<s:Button label="5"/>
		<s:Button label="6"/>
		<s:Button label="7"/>
		<s:Button label="8"/>
		<s:Button label="9"/>
	</s:Panel>
	<s:Panel id="c" x="352" y="46" width="250" height="200">
		<s:layout>
			<s:TileLayout/>
		</s:layout>
	</s:Panel>	
</s:Application>

程序运行效果图:


原来9个按钮全在左边的面板里,现在拖到了右边几个,最后还能拖回来。

10. 在textarea的光标位置插入数据,分别说一下mx的TextArea和spark的TextArea。

1) mx.controls.TextArea

// 或的文本域光标位置的方法是网上找的,先导入和使用命名空间
import mx.core.mx_internal;
use namespace mx_internal;
// 导入后就可以调用方法来得到了
public function getCaretIndex(ta : TextArea) : int {
    return (ta.getTextField() as TextField).caretIndex;
}
然后通过text属性得到文本值,通过索引来截取拼接字符串,再赋值回去,这段代码就省略了,不得不说,比较麻烦。

2) spark.components.TextArea

只需要一个方法,insertText(""),组件就会自己判断了。

11. ==和===的区别,==在比较时可以转换所有原始数据类型,===在比较是只能转换Number、int、uint三种类型,===在比较null和undefined为false。

12. as中调用js的两种方式:

1) 调用自己写的js,这个js需要写在或被引入到嵌入swf的jsp中。

// 调用_save方法,第二个参数是给_save方法传递的参数
ExternalInterface.call("_save", list.selectedItem.data);

2) 调用js自身的方法。

// 这是调用js关闭浏览器的方法,在as文件中需要引入flash.net.navigateToURL
navigateToURL(new URLRequest('javascript:window.opener=null;window.close()'),'_self');

13. as与强制类型转换的区别,见文章http://blog.csdn.net/ghsau/article/details/7297773

14.TabNavigator导航器,creationPolicy默认为auto,意味着容器将延迟创建部分或全部后代,直到需要它们时为止。此进程称为延迟实例化。如果要提前用到其它导航页或者子项,需要设置为all。

15. 使用事件时注意,要先监听事件,再派发事件。

16. 绑定的属性不能被反射,详见flex反射文章http://blog.csdn.net/ghsau/article/details/7309980

17. 通过event.target处理事件冲突,比如mouse_down和click。

18. 进制转换:

// 10->16,参数里可以填写2、4、8、10、16
"10".toString(16);
// 16->10,具体用法参考API
parseInt("0xffffff");

19. 给image控件设置图片有两种方式,第一是使用Embed绑定成类,第二种是通过source引入图片。

第一种方式是编译时把Embed绑定的东西嵌入到主swf中,所以优点是打开swf时没有延时,因为图片编译到了swf里面,缺点是这样会加大swf的字节,并且需要替换图片时只能重新编译swf。第二种方式是运行时引入,所以优点是节省swf的字节,和html载入图片效果一样。

未完待续。。。

分享到:
评论

相关推荐

    flex常见问题100题

    flex开发过程中的常见问题100问答 flex开发过程中的常见问题100问答 flex开发过程中的常见问题100问答

    Flex4.5常见问题总结

    该文档总结了flex开发中经常遇到的问题及解决方案。

    flex 第一步全部源码 实例源码

    除此之外,书中还贯穿了大量Demo级小例子,让技术不再抽象,帮你快速掌握Flex开发的关键。  本书采用概念讲解与实例结合的方式,偏重于实际应用,实用性强。适合作为Flex初学者的入门权威手册和Flex应用开发人员的...

    Flex:Web报表引擎——MyReport 2.3.0.0 + 免Flex开发集成版

    Flex:Web报表引擎——MyReport 2.3.0.0 + 免Flex开发集成版 --新增功能:重新设计表达式解析引擎,支持更多函数,运算符,支持运算符函数递归嵌套 --新增功能:重新设计表达式编辑器 --新增功能:新增字体颜色设置...

    Flex:Web报表引擎——MyReport 2.3.6.0 + 免Flex开发集成版

    Flex:Web报表引擎——MyReport 2.3.6.0 + 免Flex开发集成版 release 2.3.6.0 --新增功能:报表编辑器支持打开/报表本地文件功能 --新增功能:单元格垂直合并 --新增功能:报表编辑器,标题行支持单个和多个单元格...

    Flex企业应用开发实战源代码

    首先介绍了Flex/Flash的工作机理和利用Flex开发企业级应用必须掌握的基础知识和核心元素;接着剖析了Flex与Java的通信机制,以及Flex企业应用的客户端架构和服务器端架构;再接着详细讲解了BlazeDS框架的使用方法和...

    arcgis +Flex 开发框架

    实现了arcgis api for flex常见功能,查询、定位、标注等。

    FLEX设计师基础(图文案例教学)

    本书并没有用大量篇幅描述设计细节,但本书基本涵盖了大部分常见的设计方式,所以AIRIA推荐刚刚接触FLEX的设计师或者是FLEX开发人员参考阅读。 本书部分章节采取了案例的形式,通过了解案例的设计模式,可以带你...

    flex 数据库留言本 源码

    《Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为...除此之外,书中还贯穿了大量Demo级小例子,让技术不再抽象,帮你快速掌握Flex开发的关键。

    Flex第一步 源码

    《Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序(RichInternetApplication,缩写为...除此之外,书中还贯穿了大量Demo级小例子,让技术不再抽象,帮你快速掌握Flex开发的关键。

    Flex第一步光盘源码

    除此之外,书中还贯穿了大量Demo级小例子,让技术不再抽象,帮你快速掌握Flex开发的关键。  本书采用概念讲解与实例结合的方式,偏重于实际应用,实用性强。适合作为Flex初学者的入门权威手册和Flex应用开发人员的...

    flex 第一步 源码 使用组件处理数据和交互

    Flex第一步:基于ActionScript3.0的Flex2应用开发》讲述的:Flex是开发富互联网应用程序...除此之外,书中还贯穿了大量Demo级小例子,让技术不再抽象,帮你快速掌握Flex开发的关键。 第5章 使用组件处理数据和交互

    Web报表引擎——MyReport 2.1.0.1 (免Flex开发集成版)+.Net集成示例源码

    适用于以传统html构建的系统,希望集成MyReport报表引擎的报表预览、打印和报表设计功能,并且不需要进行Flex相关的二次开发的用户。 详情参考:http://blog.csdn.net/hunkcai/archive/2010/11/10/6001513.aspx ...

    flex modules 中英文版

    示例程序基于Flex 2文档中的一个程序,但是我将它做了一些更改来说明几个常见的问题。这个例子展示了一个主程序和其它三个共享公有数据的模块(Module)。 其中一个设计要素是一个接口的使用,这个接口实质上是...

    精通Flex 3.0——基于ActionScript 3.0实现_源代码

    2.1 搭建开发环境 11 2.1.1 对系统的要求 11 2.1.2 对软件环境的要求 12 ------------------------------ 第10章 组件表现与动画效果 222 10.1 组件样式简介 222 10.2 本地样式设定 223 10.2.1 直接...

    Dynamic Flex forms:动态生成flex(spark)表单的组件-开源

    概念验证项目,用于研究从动态(可能是外部化的)源生成Flex表单的潜力,以减少开发常见表单功能的开发时间。 我以前使用过'control'类,以允许非技术用户在外部XML文件中配置表单验证参数,但是表单和模型仍然需要...

    NI FlexRIO的常见问题解答.rar

    NI FlexRIO的常见问题解答rar,本技术文案帮助您了解一些Flex RIO的常见问题。了解什么是Flex RIO?Flex RIO包含的组件?NI FlexRIO适配器模块开发工具集(MDK)包含哪些内容?...

    Flex:Web报表引擎+Web报表编辑器——MyReport 2.0.0.0

    New:2.0版本支持Flex SDK 4.1,建议使用Adobe Flash Builder 4开发环境。 详情参考:http://blog.csdn.net/hunkcai/archive/2010/07/13/5732866.aspx Web报表引擎: Web上的良好的打印解决方案,WinForm的打印预览...

    Flex:Web报表引擎+Web报表编辑器——MyReport 1.3.0.0

    * 用Adobe Flash Builder 4/Flex Builder 3开发环境打开,用Flex SDK 3.5进行编译 * 内有报表样式定义说明 * 内有Demo工程参考,使用MyReport * 不提供MyReport源码,提供swc组件(类似dll) * 只需少量工作就能把...

    grails和flex的集成手册

    Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java 技术与当前流行的约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java 代码的无缝集成,同时还可以加入脚本编制...

Global site tag (gtag.js) - Google Analytics