<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="initTreeData()"
xmlns:lns="com.render.*">
<!--异步加载节点的树-->
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.TreeEvent;
import mx.collections.ArrayCollection;
import com.sevice.funService.FunService;
import mx.events.ListEvent;
[Embed("com/assets/loading.swf")]
private var loadingIcon:Class;
[Embed("com/assets/foldericon.png")]
public var foldericon:Class;
[Embed("com/assets/openfoldericon.png")]
public var openfoldericon:Class;
[Bindable]
public var loadingxml:XMLList;
private function initTreeData():void
{
var cm:FunService=new FunService();
cm.getNodebyfunid(this);
}
private function tree_itemClick(evt:ListEvent):void
{
var cm:FunService=new FunService();
var selectedNode:XML=treeSiteList.selectedItem as XML;
var item:Object=AsyncTree(evt.currentTarget).selectedItem;
if (treeSiteList.dataDescriptor.isBranch(item))
{
if (selectedNode.@isclicked == "false")
{
treeSiteList.setItemIcon(selectedNode, foldericon, loadingIcon);
cm.getNodebyfunid2(this, selectedNode.@id, selectedNode);
treeSiteList.expandItem(item, true, true);
}else
treeSiteList.expandItem(item, !treeSiteList.isItemOpen(item), true);
}
}
private function tree_itemOpening(evt:TreeEvent):void
{
treeSiteList.selectedItem=evt.item;
var cm:FunService=new FunService();
var selectedNode:XML=treeSiteList.selectedItem as XML;
var item:Object=AsyncTree(evt.currentTarget).selectedItem;
if (treeSiteList.dataDescriptor.isBranch(item))
{
if (selectedNode.@isclicked == "false")
{
treeSiteList.setItemIcon(selectedNode, foldericon, loadingIcon);
cm.getNodebyfunid2(this, selectedNode.@id, selectedNode);
}
//treeSiteList.expandItem(item, !treeSiteList.isItemOpen(item), true);
}
}
// private function setView(ev:TreeEvent):void
//
// {
// // Alert.show("123");
// // var item:XML=AsyncTree(event.currentTarget).selectedItem as XML;
//
// treeSiteList.selectedItem=ev.item;
// var cm:FunService=new FunService();
// var selectedNode:XML=treeSiteList.selectedItem as XML;
// var item:Object=AsyncTree(ev.currentTarget).selectedItem;
//
// if (treeSiteList.dataDescriptor.isBranch(item))
// {
// if (selectedNode.@isclicked == "false")
// {
//
// treeSiteList.setItemIcon(selectedNode, foldericon, loadingIcon);
//
// cm.getNodebyfunid2(this, selectedNode.@id, selectedNode);
//
// }
// //treeSiteList.expandItem(item, !treeSiteList.isItemOpen(item), true);
// }
//
// }
]]>
</mx:Script>
<mx:Canvas width="100%"
height="450">
<mx:VBox x="20"
y="20">
<lns:AsyncTree id="treeSiteList"
x="20"
dataProvider="{loadingxml}"
y="10"
height="400"
width="394"
labelField="@label"
itemClick="tree_itemClick(event);"
itemOpening="tree_itemOpening(event);"
>
</lns:AsyncTree>
</mx:VBox>
</mx:Canvas>
</mx:Application>
AsyncTree文件的内容
package com.render
{
import mx.controls.Tree;
import mx.events.TreeEvent;
import flash.events.Event;
public class AsyncTree extends Tree
{
public function AsyncTree()
{
super();
}
}
}
FunService.cs部分代码
public function getNodebyfunid(tree:delayLoadingTree2):void
{
loadingtree=tree;
var getCataLogRemoteObject:RemoteObject=new RemoteObject("FunService");
getCataLogRemoteObject.addEventListener(FaultEvent.FAULT, getNodebyfunidFault);
getCataLogRemoteObject.addEventListener(ResultEvent.RESULT, getNodebyfunidResult);
getCataLogRemoteObject.getNodebyfunid("ITS");
}
public function getNodebyfunidFault(event:FaultEvent):void
{
Alert.show(event.fault.message);
}
public function getNodebyfunidResult(event:ResultEvent):void
{
//curTree
var treexml:XMLList=new XMLList(String(event.result));
loadingtree.loadingxml=treexml;
// showList(treexml);
/* loadingtree.labelField="@label"; */
}
public function getNodebyfunid2(tree:delayLoadingTree2, id:String, repxml:XML):void
{
loadingtree=tree;
xml=repxml;
// this.item=item;
var getCataLogRemoteObject:RemoteObject=new RemoteObject("FunService");
getCataLogRemoteObject.addEventListener(FaultEvent.FAULT, getNodebyfunidFault2);
getCataLogRemoteObject.addEventListener(ResultEvent.RESULT, getNodebyfunidResult2);
getCataLogRemoteObject.getNodebyfunid(id);
}
public function getNodebyfunidFault2(event:FaultEvent):void
{
Alert.show(event.fault.message);
}
public function getNodebyfunidResult2(event:ResultEvent):void
{
//curTree
//var treexml:XMLList=new XMLList(String(event.result));
// Alert.show(new XMLList(event.result));
//showList(new XMLList(String(event.result)));
xml.@isclicked="true";
var newxml:XML=xml.appendChild(new XMLList(event.result));
//还原图标
loadingtree.treeSiteList.setItemIcon(xml, loadingtree.foldericon, loadingtree.openfoldericon);
//
loadingtree.treeSiteList.expandItem(xml, false, true);
loadingtree.treeSiteList.expandItem(xml, true, true);
// Alert.show(newxml);
// var treexml:XMLList=new XMLList(xmlString);
// loadingtree.labelField="@label";
}
FunServiceImpl.java部分代码,目的是获得下一级节点
public String getNodebyfunid(String funid) {
String FlexTreeNodeString = "";
String isBranch = "false";
allFuns = this.findFunsByUser("32672");
FunctionDTO[] fs = this.findFunByParentID(funid);
if (fs != null) {
for (int j = 0; j < fs.length; j++) {
if (ishasChild(fs[j].getFuncid()) == true) {
isBranch = "true";
}
FlexTreeNodeString = FlexTreeNodeString + "<Node id='"
+ fs[j].getFuncid() + "'" + "isBranch ='" + isBranch
+ "'" + " label=" + "'" + fs[j].getFuncname()
+ "' isclicked='false'>";
FlexTreeNodeString = FlexTreeNodeString + "</Node>\n";
}
}
return FlexTreeNodeString;
}
分享到:
相关推荐
综上所述,"Flex Tree 异步加载数据及分屏小工具"涉及的技术点主要包括Flex组件的使用、异步加载机制、数据提供者管理、事件驱动编程、分页策略以及源码分析和优化。这些知识对于构建高效、响应式的Flex应用程序至关...
8. **异步加载**:如果数据量非常大,可以使用异步加载机制,只在需要时加载节点的子节点,以减少初始化时的资源消耗。 在"New Folder.txt"文件中,可能包含了有关如何创建和配置Flex Tree组件的详细步骤、示例代码...
此外,通过缓存节点状态和异步加载子节点,也可以提高Tree控件的性能。 7. 样式和主题: Flex允许开发者通过CSS样式表自定义Tree控件的外观,包括字体、颜色、背景等。此外,可以使用预定义的主题或创建自定义主题...
4. **异步加载**:如果数据量很大,为了提高用户体验,你可能需要实现异步加载,即只在需要时加载节点的子节点,而不是一次性加载所有数据。 5. **皮肤和外观**:为了达到“完美”的效果,你可能需要定制TREE组件的...
在Flex4中,Tree组件还支持异步数据加载,这对于处理大量数据非常有用。通过实现`IHierarchicalData`接口和` IHierarchicaldataProvider`接口,可以在需要时动态加载子节点,提高应用性能。 在提供的源码中,你可能...
- 事件监听:监听Tree的事件,如itemClick、itemOpen等,以便进行异步加载或其他操作。 5. 示例代码: ```actionscript // 创建Tree对象 var tree:Tree = new Tree(); tree.dataProvider = new ...
8. **异步加载**:如果相册数据量庞大,可以采用异步加载策略,只在需要时加载对应部分的JSON数据,提高应用性能。 9. **工具支持**:标签提到的“工具”可能是指用来生成、编辑或测试JSON数据的工具,如Postman、...
在实际应用中,我们可能会遇到更复杂的需求,比如异步加载数据、自定义节点图标、拖放功能等。对于这些高级特性,我们需要深入理解Flex的事件模型和数据绑定机制。 在MXML中创建Tree的基本语法如下: ```xml <Tree...
在Flex开发中,动态绑定XML是一种常见的数据驱动技术,它允许开发者通过XML文件来存储和管理数据,并将这些数据实时地...不过,实际应用中还需要考虑错误处理、数据刷新、异步加载优化等问题,以提供更优质的用户体验。
4. 动态加载:如果层次结构非常大,可以考虑使用异步加载策略,只在需要时加载节点,以提高性能。 5. 节点状态管理:树节点可以有不同的状态,如展开、折叠、选中等,开发者需要管理这些状态以提供正确的用户反馈。...
- **Flex与Ajax交互**: 结合Ajax技术,实现异步数据加载和更新。 #### 六、总结 通过以上内容,我们可以看到Flex不仅提供了丰富的UI组件和强大的数据处理能力,还支持高级图表绘制和动画效果。对于GIS开发而言,...
3. 展开/折叠逻辑:处理节点的展开和折叠状态,包括异步加载数据和优化性能。 4. 事件处理:监听用户的交互,如点击、拖放等,可能需要自定义事件处理器。 5. 性能优化:大量数据可能导致性能下降,需要合理管理内存...
通过这些示例,开发者可以学习如何发送异步请求、处理响应数据、显示加载进度等,这对于构建实时更新的网管监控系统至关重要。 3. **Tree Demos**: Tree组件在Flex中用于展示层次结构数据,常见于文件系统、组织...
### Flex 开发实例(ArcGIS)相关知识点 #### 1....例如,通过Ajax异步加载部分数据而不重新加载整个页面。 以上内容涵盖了Flex开发的基本概念和技术细节,希望对学习Flex和ArcGIS集成开发有所帮助。
在这种情况下,Flex会通过HTTPService或WebService组件与服务器进行数据交换,实现异步加载和更新。数据格式可能为XML、JSON或AMF,它们都是Flex支持的常见数据格式。 在开发过程中,开发者可能使用了Flex Builder...
1. **HTTP服务**:使用Flex的HTTPService类可以轻松实现与服务器的异步数据交换。 2. **Web服务**:Flex也支持与SOAP Web服务进行交互。 3. **RESTful API**:随着RESTful API的流行,Flex同样提供了相应的支持,...
例如,使用Tree或List控件展示相册分类,使用TextInput和Button实现搜索功能,而评论系统可能涉及Ajax异步通信,将用户的反馈发送到服务器。 最后,SWF相册指的是项目最终以Flash动画的形式呈现。SWF是一种用于网络...
3. 异步通信:对于需要与服务器交互的在线游戏,AS3.0提供了XMLSocket和URLLoader等类进行异步数据传输。 四、FLEX组件应用 1. 用户界面:FLEX提供了丰富的UI组件,如Button、Sprite、Canvas等,可快速搭建游戏界面...
4. **Flex与Ajax交互**:结合Ajax技术实现异步加载数据,提高用户体验。 通过以上介绍,我们可以了解到Flex GIS开发涉及的技术点非常广泛,不仅包含了基本的Flex开发技能,还涵盖了GIS领域的专业知识。对于初学者来...