最近在看Flex,用RemoteObject方法(Blazeds)做了个动态加载树的小例子,不是很好,以后再慢慢改进吧.
mxml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script >
<![CDATA[
import mx.events.ListEvent;
import mx.events.TreeEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.collections.ArrayCollection;
import mx.collections.XMLListCollection;
private var _node:XML;
[Bindable]
private var xmlTree:XML = <node nodename="root" id="0" is_parent="1" parentnode="" action="">
<nodetemp nodename="" id="" is_parent="" parentnode="" action=""></nodetemp>
</node>;
private function addNewNode(treenode:XML,resultList:ArrayCollection):void{
if(null==resultList){
return ;
}
for(var i:Number=0;i<resultList.length;i++){
var newNode:XML = <node/>;
newNode.@id=resultList[i]["node"];
newNode.@is_parent=resultList[i]["is_parent"];
newNode.@nodename=resultList[i]["nodename"];
newNode.@parentnode=resultList[i]["parentnode"];
newNode.@action=resultList[i]["action"];
right_tree.dataDescriptor.addChildAt(treenode, newNode, i, treenode);
//如果有子节点就创建临时节点,让这个节点有itemOpen的方法
if("1"==resultList[i]["is_parent"]){
var nodetemp:XML = <nodetemp/>;
right_tree.dataDescriptor.addChildAt(newNode, nodetemp, 0, newNode);
}
}
}
private function getRightByParntResult(event:ResultEvent):void{
var resultList:ArrayCollection =event.result as ArrayCollection;
addNewNode(_node,resultList);
}
private function tree_itemOpen(evt:TreeEvent):void {
var t:Tree = evt.currentTarget as Tree;
_node= evt.itemRenderer.data as XML;
var hasload:Boolean = false;
var xmllist:XMLList = _node.elements("nodetemp");
//删除拥有子节点的临时节点
if(null != xmllist && xmllist.length() >0 ){
for(var i:Number=0;i<xmllist.length();i++){
var temp:XML = xmllist[i] as XML
right_tree.dataDescriptor.removeChildAt(_node,temp,i,_node);
}
}
xmllist =_node.elements("node");
//如果这个节点已经取过子节点就返回,不需要再取
if(null!=xmllist&&xmllist.length()>0){
return;
}
rightHandler.endpoint="messagebroker/amf";
var nodeid:String=_node.@id ;
rightHandler.getRightByParent(nodeid);
}
]]>
</mx:Script>
<mx:RemoteObject id="rightHandler" destination="rightHandler" >
<mx:method name="getRightByParent" result="getRightByParntResult(event)" />
</mx:RemoteObject>
<mx:Tree id="right_tree"
dataProvider="{xmlTree}"
itemOpen="tree_itemOpen(event)"
labelField="@nodename"
bottom="0" top="25" right="0" left="0">
</mx:Tree>
</mx:Application>
Java代码
package com.cpk.service;
import java.util.List;
import java.util.Map;
import com.cpk.dao.RightDao;
public class RightHandler {
public List<Map<String,String>> getRightByParent(String parentID){
RightDao dao=new RightDao();
return dao.query(parentID);
}
}
package com.cpk.dao;
import java.util.List;
import java.util.Map;
import com.caipk.newjdbc.sql.Finder;
import com.caipk.newjdbc.template.Jdbc;
public class RightDao extends Jdbc {
public List<Map<String,String>> query(String parentid){
return this.query(
Finder.create("select node,parentnode,nodename,action,title,closeimg,openimg,")
.append(" decode( (select node from right t where node in(select distinct parentnode from right where status='0') and t.node=right.node and parentnode=?),null,'0','1') as is_parent ")
.append(" from right")
.append(" where parentnode=?")
.setParam(parentid)
.setParam(parentid)
);
}
}
remoting-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
class="flex.messaging.services.RemotingService">
<adapters>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
<!--
<destination id="GenericDestination">
<properties>
<source>*</source>
</properties>
</destination>
-->
<destination id="EmployeeHandler">
<properties>
<source>com.cpk.service.EmployeeHandler</source>
</properties>
</destination>
<destination id="rightHandler">
<properties>
<source>com.cpk.service.RightHandler</source>
</properties>
</destination>
</service>
分享到:
- 2009-07-28 16:02
- 浏览 1884
- 评论(3)
- 论坛回复 / 浏览 (3 / 6791)
- 查看更多
相关推荐
在实际开发过程中,开发者可能会遇到的问题包括但不限于数据加载、节点展开/折叠的性能优化、节点点击事件处理、节点渲染自定义、树的动态更新、以及跨浏览器兼容性等。解决这些问题通常需要深入理解Flex的组件架构...
Tree控件可以动态加载数据,确保了性能的同时也降低了内存占用。通过绑定到文件系统的数据源,可以实时反映出文件和文件夹的变更。 此外,“缩略图形式展示文件”是Flex Air另一个增强用户体验的特性。通过使用...
动态树是一种可以实时加载或异步加载节点数据的树形结构,适用于显示大量层次化的信息。 在EXTJS中,动态树的实现主要依赖于`Ext.tree.Panel`类和`Ext.data.TreeStore`类。`TreeStore`负责管理树的数据源,而`...
1. **noTest.mxml**:这个文件可能是用来测试基础功能的,可能包含了一个简单的树形结构,用于演示Flex Tree组件的基本用法,如添加节点、设置节点文本、处理点击事件等。 2. **sclarTest.mxml**:"sclar"可能是...
例如,通过懒加载技术只在需要时加载节点,或者在大量节点被选中或取消选中时批量更新数据。 6. **测试与调试**: 对修改后的Tree控件进行全面的测试,确保所有功能正常工作,没有边界条件问题,如空节点、只有一...
Tree Demos展示了如何填充树节点、响应用户交互(如点击、展开/折叠节点)、动态加载子节点等。这对于设计具有多层级结构的界面非常有帮助。 4. **源码分析**: 这个压缩包还包含了源码,这意味着开发者可以深入...
Flex Tree 是一种基于 Adobe Flex 技术实现的可交互树形数据结构组件,它允许用户以图形化的方式查看和操作层次结构数据。在 Flex 应用中,Tree 控件经常用于展示具有层级关系的数据,例如文件系统、组织结构或者...
在实际项目中,开发者可能需要结合这些知识点,创建一个能够动态加载、展示相册结构的Flex Tree应用。由于没有具体的代码示例,无法深入讨论细节,但以上概述了实现该功能所需的关键概念和技术。对于想要深入学习的...
Flex和J2EE结合的教程主要探讨了如何利用Adobe Flex技术构建富互联网应用程序(RIA),并与Java企业级应用服务器(J2EE)进行后端交互,实现数据的动态加载和处理。这个教程对于同时熟悉Flex和Java的开发者来说,是...
这很可能是Flex中一个用于测试树形控件(Tree Control)的示例程序。Tree Control是Flex提供的数据可视化组件,用于展示层次结构的数据。开发者可以通过MXML或者ActionScript来创建和配置树形控件,设置其数据提供者...
编写测试类、执行测试用例等步骤都是Flex单元测试的基础。 #### Silverlight自动化测试 Silverlight是微软推出的一款用于构建RIA的框架,它同样支持自动化测试。TestComplete是一款强大的自动化测试工具,可用于...
- **子应用程序的开发与加载**:Flex支持将大型应用程序分解为多个较小的子应用程序,这些子应用程序可以根据需要动态加载。 - **Flex Ajax Bridge**:Flex Ajax Bridge提供了一种机制,使Flex应用程序能够与...
10. **测试和调试**:FlexBuilder提供了强大的测试和调试工具,包括FlexUnit单元测试框架,理解如何有效地使用这些工具可以提高开发效率。 通过学习“Flex3.0 RIA开发详解电子教程14”,开发者不仅可以掌握Flex的...
- **简介**:一个用于测试和调试Flex应用的框架。 - **特点**: - 测试支持:内置了单元测试框架,简化测试过程。 - 调试工具:提供了强大的调试功能,帮助开发者定位问题。 - 性能监控:能够监测应用运行时的...
10. **测试与调试**:在整个开发过程中,单元测试和集成测试都是必不可少的,以确保各个功能模块的正确性和整体性能。 以上就是关于"Flex Air 拖拽排版 类似 ps 图层"这个主题涉及的一些主要技术点。通过学习和实践...
根据提供的文件信息“flex_4.6_help.pdf”,我们可以从中提炼出Adobe Flex 4.6这一版本的关键知识点,包括但不限于其开发工具、应用架构、用户界面构建、数据驱动UI组件的使用以及增强用户体验等方面。 ### Adobe ...
6. **性能优化**:在处理大量数据时,懒加载和虚拟滚动等技术可以提高组件的性能,只渲染可视区域内的节点,避免一次性加载所有数据导致的性能问题。 7. **响应式设计**:确保组件在不同屏幕尺寸下都能正常工作,...
在树形结构图中,每个节点通常会用一个`<div>`表示,而子节点则嵌套在父节点的`<div>`内,通过CSS的`display`属性(如`block`、`inline-block`或`flex`)来控制布局,形成层次结构。 CSS特效在这里起着至关重要的...
2. **命令树加载**: 根据第一步得到的子系统根命令动态加载相应的命令树。每台仪器都有自己的命令树结构,这使得SCPI具有高度的灵活性和适应性。 3. **遍历命令树**: 从根节点开始遍历命令树,直至找到与输入字符串...