现在的位置: 首页 > 综合 > 正文

FLEX经验和问题总结

2013年03月22日 ⁄ 综合 ⁄ 共 5464字 ⁄ 字号 评论关闭

 

1.         如何保持按钮第一次按下不弹起,直到再下一次按下才弹起?

     <mx:Button id="btnAction" click="doAction()"

               toggle ="true" selected="false"/>

Buttontoggle属性设置按钮能否进行切换。

如果该值为 true,则单击按钮将在选中状态和未选中状态之间进行切换。可以通过Selected属性获取或设置此状态。
如果该值为 false,则用户释放按钮后,它不再保持按下状态。 在这种情况下,它的 selected 属性始终为 false

 

2.         如何实现Sleep函数?

采用flash.utils.setTimeout函数实现,如下例:

private function launchAlert():void {
    Alert.show("I'm an alert.");
}

2
秒后执行这个方法
flash.utils.setTimeout(launchAlert, 2000);

 

3.         如何动态指定DataGriditemRenderer

var dgc : DataGridColumn = new DataGridColumn();
dgc.itemRenderer =
new ClassFactory(view.ListCell);

 

4.         如何动态指定DataGrid的排序函数?

private static function sortFunc(field:String):Function{    

    return function sortLevel(itemA:Object, itemB:Object):int {

return ObjectUtil.numericCompare(itemA[field],itemB[field]);

              }

}

……

var dgc : DataGridColumn = new DataGridColumn();

dgc.sortCompareFunction= sortFunc("column");

 

5.         如何实现在DataGrid的列中显示图片?

采用itemRenderer实现,如下:

var dgc : DataGridColumn = new DataGridColumn();

dgc.itemRenderer = new ClassFactory(view.ImageCellRenderer);

或者

<mxDataGrid id="dgShipWeight" dataProvider="{_acData}">
    <mx:columns>
      <mx:Array>
       <mxDataGridColumn headerText="level" editable="false"
            itemRenderer=" ImageCellRenderer "/>
      </mx:Array>
    </mx:columns>
 </mxDataGrid>

ImageCellRenderer.mxml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>

<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">

    <mx:Script>

        <![CDATA[

        override public function set data(oItem:Object):void

        {

            if (oItem != null) {

             var  csLevel:String = oItem.risk;

              if (csLevel == "高级")

                {

                  image.source = "images/high.JPG";

                }

                else

                {

                  image.source = "images/connect.JPG";

                }

            }

        }

       

        ]]>

    </mx:Script>   

    <mx:Image id="image"/>

</mx:VBox>

 

注意:如果在ImageCellRenderercreationComplete调用的函数中进行图片的动态加载,将出现乱序的问题。

 

6.          如何获取DataGrid总数据行

Flex里面有一个public propertyrowCount,那个是获取或设置在列表中至少部分可见的行的行数,并不能获得总的数据行。除此以外,好像没有什么属性、方法,可以直接获取DG总数据行数。在数据库里查找倒是很简单的。   后来,我发现,如果设置selectedindex大于总的数据行数,那该索引指向的便是数据行的最后一行。由此便得到一个获取DG数据行的曲线方法。

var selectedRow:int;

var tempCount:int=1000;

var rCount:int;

selectedRow=dg.selectedindex;

dg.selectedindex=tempCount;

rCount=dg.selectedindex+1;

dg.selectedindex=selectedRow;

rCount就是总行数,因为Index是从0开始的,故此要加一。 tempCount设置是一个默认比行数多的数。

 

7.          如何增加右键单击菜单?

初始化右键菜单,增加菜单项:

private function InitContextMenu():void

{

    var contextmenu : flash.ui.ContextMenu = new flash.ui.ContextMenu();

    contextmenu.hideBuiltInItems();

    var context_menuItem : ContextMenuItem = new ContextMenuItem("测试右键菜单...");

    contextmenu.customItems.push(context_menuItem);         context_menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, testRightMenu);

    this.contextMenu = contextmenu;             

}

 

实现右键菜单功能:

private function testRightMenu(event : ContextMenuEvent):void {         Alert.show(“Test right click menu!”);   

}

 

8.          FLEX 如何POST大量数据?

如下是提交一段XML数据到WEB服务器上

var request:URLRequest=new URLRequest("http://xxx.com/2.0/flex_save.php");
request.method=URLRequestMethod.POST;
var vars:URLVariables = new URLVariables();
vars.xml=expxml() //
这里是一大串字符串
vars.name=savename.text;//
这里是小串字符串
request.data=vars;
var loader:URLLoader=new URLLoader()
loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.load(request) ;
loader.addEventListener(Event.COMPLETE,onSaveOver) ;

 

9.         IE6 通过HTTPS访问FLEX的功能存在问题

分析:IE6 HTTPS 下载问题,解决方法:修改WINDOWS注册表,如下

reg add "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/

CurrentVersion/Internet Settings" /v "BypassSSLNoCacheCheck" /t "REG_DWORD" /d "1" /f

 

10、曲线控件增加背景栅格?

<mx:backgroundElements> 
    <mx:GridLines direction="both"
      horizontalChangeCount="1" verticalChangeCount="2"
      horizontalTickAligned="true"  verticalTickAligned="true"> 
     <mx:horizontalStroke> 
      <mx:Stroke weight="2" color="green"/> 
     </mx:horizontalStroke> 
     <mx:horizontalFill> 
      <mx:SolidColor color="black" alpha=".66"/> 
     </mx:horizontalFill> 
     <mx:horizontalAlternateFill>
      <mx:SolidColor color="black" alpha=".66"/> 
     </mx:horizontalAlternateFill>
     <mx:verticalStroke> 
      <mx:Stroke weight="1" color="green"/> 
     </mx:verticalStroke> 
     <mx:verticalFill> 
      <mx:SolidColor color="black" alpha=".66"/> 
     </mx:verticalFill> 
     <mx:verticalAlternateFill> 
      <mx:SolidColor color="black" alpha=".66"/> 
     </mx:verticalAlternateFill> 
    </mx:GridLines> 
   </mx:backgroundElements>

 

11、在IEFIREFOX上同时支持JAVASCRIPTFLEX的交互

function getSwf(swfName)
{
 
    if (navigator.appName.indexOf("Microsoft") != -1)
    {
     return window[swfName];
    }
    else
    {
     return document[swfName];
    }
}

 

function init()
{
 setTimeout("testCall()", 1000);
}

 

function testCall()
{
 var xml = "1234";
 var obj = getSwf("AbcSwf");
 try
 {
  obj.ProcessData(xml);
 }
 catch (e)
 {
  alert(e.name + ": " + e.message);
 }
 finally
 {

}

 

12、关于FLASHPLAYER的版本检测?

可以通过JAVASCRIPTACTIONSCRIPT等方式进行版本检测。最好的方式是通过JS进行版本检测,例如在登录页面进行版本检测。

FLEX BUILDER3 编译的程序运行要求FLASHPLAYER>9.0.28就可以,但是考虑到9.0.115以及以前的版本存在严重的安全漏洞,因此FLASHPLAYER版本要求>=9.0.124

 

13、曲线控件的横坐标轴的文字旋转/倾斜问题

       曲线控件需要使用设备嵌入字体。

<mx:Style source="css/style.css">
</mx:Style> 

style.css

@font-face {
  src: local("Arial");
  font-family: EmbeddedArial;
 }
    ColumnChart {
        fontFamily: EmbeddedArial;
        fontSize: 10;
 }

如果是中文,则可以使用宋体,不能同时使用2种设备嵌入字体。

注意:生成的SWF包含嵌入字库,因此文件会比较大。

 

14SWF文件安全沙箱在本地运行的问题。

      解决办法就是在编译时,加个参数 -use-network=false

 

15、如何关闭SWF文件中的调试信息。

      为了缩短下载时间,对比一下使用 RSLs 前后的应用程序的大小是很有益的。默认情况下,Flex Builder SWF 文件里加入了调试信息,所以,要看程序真实的大小,请关闭调试信息。想要关闭调试信息,可以在 Flex 编译器属性对话框的 Additional Compiler Arguments 那一部分加上 -debug=false

 

16

抱歉!评论已关闭.