`
#天琪#
  • 浏览: 159356 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

自己做的一个关于Module的例子

    博客分类:
  • FLEX
阅读更多
主程序customModule.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
  percentWidth="100" percentHeight="100" width="600" height="500"  initialize="init()" >
<mx:Script>
<![CDATA[
    import customAs.treeAndTextArea.TreeAndTextArea;
public var treeAndTextArea:TreeAndTextArea;

private function init():void
{
treeAndTextArea=new TreeAndTextArea(treeModule,textAreaModule);
}
]]>
</mx:Script>
<mx:ModuleLoader  id="treeModule" x="0" y="0" width="300" height="500" />
<mx:ModuleLoader  id="textAreaModule" x="300" y="0" width="300" height="500"  />
</mx:WindowedApplication>

数据传送方del.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:custom="*" layout="absolute"  initialize="init()"
        percentWidth="100" percentHeight="100">

<mx:Script>
   <![CDATA[
   import mx.controls.TextInput;
   import mx.events.ListEvent;
    import flash.events.MouseEvent;
     import flash.ui.ContextMenu;
     import flash.ui.ContextMenuItem;
     import flash.events.*;
     import mx.events.ListEvent;
     import mx.controls.Alert;
     import flash.utils.getQualifiedClassName;
  
  
     public var itemClick:XML;//当前选中节点的XML结构
     public  var replace:XML;//tree的dataprovider的XML结构
     public var nodeIndexArray:Array=new Array();//用于存储当前选中节点到根节点的关联节点的索引值
     public var currentNode:XML;//从当前选中节点到根节点过程中经历的节点
     public var targetNodeIndex:int;//选中节点的索引
     public var bool:Boolean=false;
    
     public function iItemClick(ac:XMLList):void
     {
    
     }
       
      public function init():void 
      {
      var contextMenu1:ContextMenu=new ContextMenu();//创建右键菜单
      contextMenu1.hideBuiltInItems();//隐藏内置菜单
      var deleteItem:ContextMenuItem=new ContextMenuItem("删除");//创建右键菜单元素
      var addNodeMenuItem:ContextMenuItem=new ContextMenuItem("添加");
      var renameMenuItem:ContextMenuItem=new ContextMenuItem("重命名");
      contextMenu1.customItems.push(deleteItem,addNodeMenuItem,renameMenuItem);//将菜单元素添加到菜单中
      deleteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,deleteHandler);//侦听事件
      addNodeMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT ,addNodeHandler);
      renameMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT ,renameHandler);
      menuBarTree.contextMenu=contextMenu1;
     
           
     
    }
   
    public function ce():void
    {
    trace("interaface");
    }
   
/*-----------处理单击树控件的元素时发出事件---------
----------------------------------------------------
--------------------------------------------------*/
     
      private function itemClickHandler(event:ListEvent):void
      {
      itemClick=new XML();
      itemClick=event.target.selectedItem;
      ItemClickData.getInstance().dispatchEvent(new Event(ItemClickData.INIT));
      trace(ItemClickData.getInstance());
      }
     
     
     
/*--------------添加元素--------------------
----------------------------------------------------
--------------------------------------------------*/
           
      private function addNodeHandler(event:ContextMenuEvent):void
      {
        var textIndex:int=0;
          var newNode:XML = <menu label="未命名"/>;
       itemClick.appendChild(newNode);
     //  ItemClickData.getInstance().dispatchEvent(new Event(ItemClickData.INIT));
     
      }     
     
/*--------------删除元素--------------------
----------------------------------------------------
--------------------------------------------------*/
     
      private function deleteHandler(event:ContextMenuEvent):void
      {
      ItemClickData.getInstance().dispatchEvent(new Event(ItemClickData.FILE));
      replace=new XML();
           replace=XML(treeData.xx);
          
           nodeIndexArray.length=0;//清空索引数组
          
           currentNode=new XML();
           currentNode=itemClick;//对currentNode进行初始化
           targetNodeIndex=itemClick.childIndex();
          
            find();
      }
     
      private function find():void
      {
         if (itemClick.@label=="rootNode")
           {
               Alert.show("不可以被删除");
           }
           else if (currentNode.parent().@label!="rootNode")
           {
               currentNode=currentNode.parent();
               nodeIndexArray.push(currentNode.childIndex());
               find();
           }
           else
           {
              if(itemClick.parent().@label=="rootNode")
              {
              delete replace.children()[targetNodeIndex];
              }
               else
               {
                      for (var i:int=nodeIndexArray.length;i>0;i--)
                   {
                   var index:int=nodeIndexArray[i-1];
                   var deleteXML:XML=replace.children()[index];
                   replace=replace.children()[index];
                   }
                     delete deleteXML.children()[targetNodeIndex];
                }
            }
                   
     
      }
     
/*--------------重命名元素--------------------
----------------------------------------------------
--------------------------------------------------*/
           
      private function renameHandler(event:ContextMenuEvent):void
      {
      menuBarTree.editable=true;
      menuBarTree.editedItemPosition=
         {rowIndex:Number(menuBarTree.selectedIndex),columnIndex:Number(0)};
     
      }
     
     
      private function itemEndHandler(e:Event):void
      {
      menuBarTree.editable=false;
      }
 



     
     

     
/*--------------dataProvider---------------
----------------------------------------------------
--------------------------------------------------*/
     
      var treeData:XML=
      <root>
      <xx label="目录">
           <menu label="第一章">
                  <menu label="1.1"/>
                   <menu label="1.2"/>                    
                 
            </menu>
           <menu label="第二章">
                  <menu label="2.1"/>
                  <menu label="2.2"/>
           </menu>
           <menu  label="第三章"/>
           <menu label="第四章">
                  <menu label="4.1"/>
                  <menu label="4.2"/>
           </menu>
       </xx>
      </root>
     
   ]]>
</mx:Script>
<mx:Tree id="menuBarTree"  width="100%" height="100%"  horizontalScrollPolicy="auto"
dataProvider="{treeData.xx}" labelField="@label" showRoot="true"
itemClick="itemClickHandler(event)"  itemEditEnd="{itemEndHandler(event)}"
itemRenderer="renderers.ColoredFolderTreeItemRenderer"
      folderOpenIcon="@Embed('/renderers/open.png')" folderClosedIcon="@Embed('/renderers/closed.png')"/>
  
</mx:Module>


接收数据方textArea.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" percentWidth="100" percentHeight="100" initialize="init()">
<mx:Script>
<![CDATA[
import mx.controls.TextArea;
import mx.controls.TextInput;
   import mx.events.ListEvent;
     import flash.events.MouseEvent;
     import flash.ui.ContextMenu;
     import flash.ui.ContextMenuItem;
     import flash.events.*;
     import mx.events.ListEvent;
     import mx.controls.Alert;
     import flash.utils.getQualifiedClassName;
     import flash.utils.getDefinitionByName;
    
     public var textIndex:int=0;
     public var nameIndex:int=0;
     public var textAreaAry:Array=new Array();
     public var textAreaNameAry:Array=new Array();
     public var receviedItemClickData:XML;//当前选中节点的XML结构
    
     private function init():void
     {
     ItemClickData.getInstance().addEventListener(ItemClickData.INIT,text);
     ItemClickData.getInstance().addEventListener(ItemClickData.FILE,deleteHandler);
     }
    
     private function text(e:Event):void
     {
     receviedItemClickData=new XML();
     receviedItemClickData=ItemClickData.getInstance().midData;
     creatTextInput();
    
    
     /******查找textAreaNameAry数组当中与当前tree被选中的节点的textAreaInput的属性名,
         *****得到与查找结果相符的数组索引,因为在创建过程中某一实例的引用的数组索引与该实例的实例名
         * ***的数组索引是相同的中,所以就可以得到想要的实例在数组中的位置了***********/
     for (var m:int=0;m<textAreaAry.length;m++)
      {
      if( String(receviedItemClickData.@textAreaInput)== String(textAreaNameAry[m]) )
      {
                   textCanvas.setChildIndex(textAreaAry[m],textIndex-1);
                   return ;  
      }     
      }
     
     }
    
     private function deleteHandler(e:Event):void
     {
     textCanvas.removeChildAt(textIndex);
     textIndex--;
     }
private function creatTextInput():void
      {     
      if (!receviedItemClickData.hasOwnProperty("@textAreaInput")) //若没,创建文本区域
      {
        textIndex++;
        nameIndex++;
        receviedItemClickData.@textAreaInput="addTextArea"+nameIndex;//设定文本实例的名字
      var input:TextArea=new TextArea();
      input.name=receviedItemClickData.@textAreaInput;
      input.text=String(receviedItemClickData.@textAreaInput);
      textCanvas.addChild(input);
      input.x=input.y=0;
      input.percentWidth=100;
      input.percentHeight=100;
     
      textAreaNameAry.push(input.name);//将文本实例的名字存储到textAreaNameAry
      textAreaAry.push(input);//将文本实例存储到textAreaAry,与textAreaNameAry同步
      }

      //如果已经拥有了textAreaInput属性,则返回
      return;
      
      }  
]]>
</mx:Script>
<mx:Canvas id="textCanvas"  width="100%" height="100%">
<mx:TextArea text="dkjs" width="100%" height="100%"/>
</mx:Canvas>
</mx:Module>

这个例子中实现了,可以对一棵树进行添加、删除、重命名操作,并且每个子节点都对应了一个文本区域,点击某个子节点,相对应的文本区域显示在最上层,做了好久的东西,全在这了。


但还有一个问题textArea.mxml文件中最后几句<mx:Canvas id="textCanvas"  width="100%" height="100%">
<mx:TextArea text="dkjs" width="100%" height="100%"/>
</mx:Canvas>
如果将mx:TextArea 换成mx:TextInput程序将无法运行,但是这又不是绝对的,它有时候又会正常,我现在已经无法用语言描述我段过程,因为上一刻还是错误的东西,比如说上一时刻我用的是mx:TextInput,我反复的运行,它报错,当我写了这篇文章后,再将mx:TextArea换成mx:TextInput后,它运行正常,但是当我再将它改成mx:TextInput的时候,程序居然运行起来了,而且是正确无比~~这真的不是第一次发生~~我不知道这个问题究竟是程序的BEDUG,还是代码的逻辑问题,更多的时候我在怀疑是我人的问题,我记忆的问题,我神经的问题~~我想我是太累了~~我想应该是我某个过程中记错了步骤~~我想我应该洗洗睡了~~
分享到:
评论

相关推荐

    flex一个动态添加卸载Module的例子

    模块(Module)是Flex应用程序的一个重要组成部分,它允许我们将大项目分解为更小、更易于管理的部分。动态加载和卸载Module是优化应用程序性能和减少初始化时间的有效方法,特别是在需要根据用户需求按需加载功能的...

    深层,多个module打包工具以及例子.zip

    标题提到的“深层,多个module打包工具以及例子”着重讨论的就是如何处理这些具有深度依赖关系的多模块项目,并将最外层的模块打包成一个可使用的格式,例如`aar`(Android Archive)文件。 `aar`文件是Android库...

    第一个Nginx模块的例子

    标题中的“第一个Nginx模块的例子”意味着我们将探讨如何创建一个自定义的Nginx模块。Nginx是一个高性能的Web服务器和反向代理服务器,它以其轻量级、高并发处理能力而闻名。开发自定义模块可以让用户扩展Nginx的...

    myfragmenttabhost的Module例子

    Android TabLayout+ViewPager+Fragment 简单实现,本内容参考此作者详解https://www.jianshu.com/p/adf7a994613a,自建demo,欢迎指正

    一个简单的systemc编程小例子

    这通常涉及到编写一个或多个过程,如`sc_module::SC_CTOR()`构造函数,其中初始化端口,并可能包含其他处理函数,如`void posedge_clk()`,在时钟上升沿触发时执行。在这个过程中,我们将使用逻辑运算符`||`来实现OR...

    JBoss 引用 module 说明

    在JBoss中,模块是一个独立的单元,包含一组相关的类和其他资源,并且定义了自己的依赖关系。每个模块都有一个唯一的标识符,由`module name`和`module slot`组成,如`org.jboss.some.lib/main`。`module name`通常...

    前端开源库-json2module

    在这个例子中,`jsonData`是一个普通的JSON对象,`json2module`会将其转换为一个ES6模块,可以像导入其他模块一样导入这个转换后的数据。 ### 应用场景 1. **API数据处理**:当你从服务器获取到JSON数据后,可以...

    dojo 一个小的例子

    Dojo 是一个强大的JavaScript工具库,它为Web开发提供了丰富的功能和组件,包括DOM操作、AJAX通信、动画效果、模块管理和MVC框架等。在这个小例子中,我们将深入理解Dojo的核心概念,并通过实践来熟悉其用法。 1. *...

    Verilog模块module

    从例子中可以看出整个 Verilog HDL 程序是嵌套在 module 和 endmodule 声明语句里的,只出现了一个 assign 语句。 例设计:SR 触发器模块 模块名:SR_FF 端口列表:Q, Q_n, S, R 端口声明:output Q, Q_n; input...

    vuex学习的小例子,包含所有的State、Getter、Mutation、Action、Module的使用

    当你在阅读官方文档时遇到困惑,这个例子可以作为一个调试和学习的辅助工具,帮助你将理论知识转化为实际操作。在实践中学习总是更加直观和深刻,所以不要害怕动手尝试,这是提升技能的有效途径。

    fullcalendar例子

    1. Datemanagement.sln:这是一个Visual Studio的解决方案文件,通常包含一个或多个项目。打开这个文件,我们可以查看和编辑与FullCalendar相关的代码,包括HTML、CSS和JavaScript文件。这些文件将展示如何在实际...

    module_param

    `module_param` 是一个非常重要的宏,它允许开发者向内核模块传递参数,并且能够通过 sysfs 文件系统访问这些参数。这对于调试和配置内核模块具有重要意义。 #### 二、`module_param` 的定义与作用 `module_param`...

    nginx_upstream_check_module

    **Nginx Upstream Check Module** 是一个由淘宝团队开发的插件,专门用于Nginx服务器,旨在增强其反向代理功能,提供对后端服务器节点的健康检查。这个模块使得运维人员能够实时监控后端服务器的状态,确保在将请求...

    script.module.keyboard.chinese-2.0.0

    标题“script.module.keyboard.chinese-2.0.0”表明这是一个特定版本的模块,用于支持中文输入法。在IT领域,模块通常是软件开发中的一个组件,它可以被其他程序或应用程序调用,提供特定的功能。在这个例子中,...

    nginx-sticky-module-ng-1.2.6.tar.gz

    在这个例子中,我们创建了一个名为 `backend` 的上游服务器组,并设置了 sticky 模块。`cookie sess_name` 参数定义了 cookie 的名称,`expires` 定义了有效期,`domain` 和 `path` 分别指定了 cookie 的作用域。 *...

    Python 从一个文件中调用另一个文件的类方法

    如果是在同一个 module中(也就是同一个py文件里),直接用就可以 如果在不同的module里,例如 a.py里有 class A: b.py 里有 class B: 如果你要在class B里用class A 需要在 b.py的开头写上 from a import A 举个例子:...

    一个linux驱动的例子

    接下来,我们将通过一个简单的例子来演示如何编写一个Linux内核模块。这个例子将展示基本的模块结构,包括初始化函数和卸载函数。 ##### 3.1 模块文件结构 ```c /* file: hello.c */ #ifndef __KERNEL__ #define ...

    module.zip

    JavaScript模块化是编程实践中至关重要的一个方面,尤其是在大型项目中,它帮助我们组织代码,保持其可维护性和可重用性。"module.zip" 文件包含了关于JavaScript模块化的示例,涵盖了浏览器模块化和Node.js模块化的...

    一个corba应用程序例子.pdf

    ### 一个CORBA应用程序例子——基于VisiBroker的开发流程 #### 一、概述 本文档详细介绍了一个基于VisiBroker的CORBA应用程序的例子,重点在于使用VisiBroker for Java进行开发的过程。CORBA(Common Object ...

    Verilog 大量例子(共130多个例子由浅入伸)

    Verilog是一种广泛应用于硬件描述语言(HDL)的编程语言,用于设计数字系统,包括集成电路、微处理...实践是学习的最佳方式,所以建议读者亲手编译和仿真每个例子,理解其工作原理,以此来提升自己的Verilog设计能力。

Global site tag (gtag.js) - Google Analytics