Flex树形菜单动态加载
- 格式:docx
- 大小:40.56 KB
- 文档页数:3
Vue:eliment-uiel-tree动态加载更新最近在数据源管理功能,需要以树的形式异步展现:根节点可以新增⽬录。
⽬录节点可以新增⽬录,编辑⽬录,新增主数据。
主数据节点⽆操作按钮。
找到element-ui的官⽅⽂档,el-tree。
(地址:)1.节点后添加操作按钮renderContent(h, { node, data }) {return (<span class="custom-tree-node"><span>{bel}</span><span><iv-show={node.level == 1 || data.nodeType == Folder }class="el-icon-plus"title="新增⽬录"on-click={() => this.editBizFolder(node, "add", resolve)}/><iv-show={data.nodeType == Folder}class="el-icon-edit"title="编辑⽬录"on-click={() => this.editBizFolder(node, "edit")}/><iv-show={data.nodeType == Folder}class="el-icon-document"title="添加主数据"on-click={() => this.addBizObject(node)}/></span></span>);}2. 默认根节点是展开的<el-tree:data="data":props="defaultProps":load="loadDataTree"lazy:expand-on-click-node="false":render-content="renderContent"node-key="id":default-expanded-keys="['1']"@node-click="nodeClick"></el-tree>标红处为关键代码3. 动态添加,更新后刷新节点append⽅法肯定是不⾏的,添加完成后,需要重新拉取查询⼦节点的接⼝,这个⽅法放弃了,缓存resolve⽅法,这个⽅法也是不可取的,this的指向会发⽣问题(展开节点a再点击b节点的新增⽬录),这个⽅法也必须得放弃。
移动端实现树级菜单的方法全文共四篇示例,供读者参考第一篇示例:在移动端开发中,实现树级菜单是一项常见且重要的任务。
在移动设备上,由于屏幕空间有限,设计和实现树级菜单需要考虑到用户体验和界面布局的限制。
本文将介绍一些常见的方法和技巧来实现移动端的树级菜单。
一、使用折叠菜单折叠菜单是一种常见的树级菜单设计模式,适用于移动设备上的界面。
在折叠菜单中,每个父级菜单项下面可以展开或折叠多个子级菜单项,用户可以点击父级菜单项来展开或折叠子级菜单项。
这种设计模式节省了屏幕空间,并且用户可以方便地浏览和操作树状结构的数据。
在实现折叠菜单时,可以使用HTML、CSS和JavaScript来构建。
可以使用HTML的ul和li标签来表示菜单的层级结构,使用CSS样式来控制菜单的外观和布局,使用JavaScript来添加交互效果和实现菜单的展开和折叠功能。
通过合理的布局和样式设计,可以在移动设备上呈现出清晰、易用的树级菜单。
二、利用滑动菜单在实现滑动菜单时,可以利用现有的移动端UI框架或库来快速实现。
一些流行的移动端UI框架,如jQuery Mobile、Ionic等,提供了丰富的界面组件和交互效果,可以帮助开发人员快速构建滑动菜单。
通过合理的布局和交互设计,可以让滑动菜单在移动设备上呈现出流畅、直观的用户体验。
三、响应式设计在设计移动端树级菜单时,需要考虑到不同设备屏幕大小和分辨率的差异。
为了适应不同尺寸的移动设备,可以使用响应式设计的技术来实现自适应的界面布局。
通过使用CSS媒体查询和弹性布局等技术,可以让树级菜单在不同尺寸的屏幕上自动调整布局和样式,确保用户在任何设备上都能够方便地访问和操作菜单。
在移动端实现树级菜单时,需要综合考虑用户体验、界面设计和技术实现等多方面因素。
通过选择合适的设计模式、利用现有的UI框架和工具、采用响应式设计等方法,可以实现一个优秀的移动端树级菜单,为用户提供更好的导航和操作体验。
希望本文介绍的方法和技巧能够帮助开发人员更好地实现移动端树级菜单。
动态加载原理
动态加载是一种通过在运行时加载并执行代码的方法,其原理是使用编程语言提供的相关功能,比如反射、动态链接库等。
与传统的静态加载相比,动态加载具有灵活性和可扩展性,能够根据条件或需求来决定加载哪些代码。
动态加载的基本原理可以分为以下几个步骤:
1. 检测和判断:根据特定的条件或者需求判断是否需要加载某个代码。
这可以通过运行时的上下文信息、用户输入或者其他外部条件进行判断。
2. 加载代码:根据前面的判断结果,将需要加载的代码从指定的源(如文件、网络等)中获取到本地。
这可以使用编程语言提供的文件读取或者网络请求等相关API来实现。
3. 编译或解释:如果加载的代码是需要进一步处理的,比如需要编译成可执行代码或解释成机器指令,那么需要在这个步骤中进行相应的操作。
这个步骤通常是针对某些特定的语言或平台,在实现上会有所差异。
4. 链接和依赖处理:对于某些需要链接或者动态依赖的代码,需要进行相应的处理。
这可以包括符号解析、地址重定位等步骤,以确保加载的代码能够正确地与其他代码进行交互。
5. 执行代码:在前面步骤完成后,就可以执行加载的代码了。
这可以使用编程语言提供的相关API或者机制来执行,比如
调用函数、实例化对象等。
总的来说,动态加载利用编程语言提供的相关功能,通过判断、加载、编译、链接和执行等步骤,实现了在运行时加载代码的灵活性和可扩展性。
这种加载方式在很多场景下都非常有用,比如插件系统、按需加载等。
【Android编程之旅】社区活动:写博文获精彩图书!用ExtJS 实现动态载入树(Load tree)分类:web ExtJS 2007-11-09 14:23 16502人阅读评论(14) 收藏举报用ExtJS 实现动态载入树(Load tree)1、数据库背景:这里有一个组织机构表,结构如下:Oracle DDL脚本:create table ORGANIZATION(ORGID NUMBER(10) not null,PARENTID NUMBER(10) not null,ORGNAME VARCHAR2(32) not null,ISAVAILABLE NUMBER(1) default1not null);alter table ORGANIZATIONadd constraint PK_ORGID primary key (ORGID);alter table ORGANIZATIONadd constraint FK_ORGID_PARENTID foreign key (PARENTID)references ORGANIZATION (ORGID);初始化数据内容(注意第一行数据是必需的):insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (-100, -100, '组织机构图', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (1, -100, '公司总部1', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (2, -100, '公司总部2', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (3, -100, '公司总部3', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (4, 1, '公司总部1-1', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (5, 1, '公司总部1-2', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (6, 2, '公司总部2-1', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (7, 2, '公司总部2-2', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (8, 3, '公司总部3-1', 1);insert into LOON_ORGANIZATION (ORGID, PARENTID, ORGNAME, ISAVAILABLE) values (9, 3, '公司总部3-2', 1);有了数据库支持就可以动态的从数据库中提取树数据。
FLEX AS3 做地图滑动以及元件动态加载1.总结目的前段时间开发Flash 游戏,游戏中需要动态load地图,并且根据元件的数据,重复load 相同的地图,根据鼠标停留在不同的按钮上地图发生相应的滚动。
由于素材都是从网络上找的所以效果比较难看,美工把图片设计出来放上去就可以用了。
2.开发流程2.1. 地图加载1)首先我们找了一张图片在flash cs3 中做成flex元件。
元件类名:MapBackGround。
在flex 开发工具中创建一个MapSlide.as 的类,继承Canvas。
因为我们最终要放入到flex容器中,所以必须继承Canvas。
编写代码如下:mc = new Canvas() 是指地图的装在容器,以为我们会根据地图上需要显示元件的数量决定地图的重复次数。
var window:Rectangle = new Rectangle(0, 0, 500, 400) 区域对象,主要是设置一个矩形区域的坐标,已经高度和宽度。
地图肯定是大于我们屏幕上显示区域的大小,我们就需要通过设置Rectangle ,改变显示地图的大小已经坐标。
Rectangle 构造方法里面有4个参数,第一个是X坐标,第二个是Y坐标,设置这两个参数,控制地图的X,Y坐标和屏幕地图容器的左上角对其。
第三个是WIDTH,第四个是HEIGHT,这两个参数主要控制地图容器的宽度和高度。
mc.scrollRect = window; 这一句就是指:把矩形区域设置成MC 容器(地图容器)。
var map:MapBackGround = new MapBackGround(); 创建一个地图对象,这个地图对象上面已经提到,是通过flash 创建的flex元件。
2.2. 地图上元件加载1)游戏开发中,许多时候,我们需要在地图中加载其他的元素。
House 指用户falsh cs3所作的flex元件方法参数mc:加载房屋元件的容器x,y:放置房屋元件的坐标2.3. 地图重复load1)确定地图根据什么进行重复,我本次实例是,我会根据元件房屋的数量进行重复地图。
移动端实现树级菜单的方法
在移动端实现树级菜单的方法有很多种,这里我会列举几种常见的方法:
1. 嵌套列表(Nested List):这是最简单的方式,每个节点可以是一个列
表或者一个子菜单。
然而,这种方法可能会在移动设备上显得过于复杂和混乱,因为需要滚动和缩放才能查看所有的菜单项。
2. 展开/折叠菜单(Accordion Menu):这是另一种常见的方法,每个节
点都有一个展开和折叠的按钮。
当用户点击一个节点时,该节点及其所有子节点会展开或折叠。
这种方法的好处是用户可以一次查看所有的菜单项,但是它可能会在层次很深的菜单上显得很混乱。
3. 侧边抽屉菜单(Side Drawer Menu):这是一种常见的移动端导航模式,用户可以从屏幕的一侧滑动打开一个包含所有菜单项的列表。
这种方法的优点是用户可以快速访问任何菜单项,但是如果菜单项太多,用户可能需要多次滑动才能找到他们想要的。
4. 面包屑菜单(Breadcrumb Menu):这种菜单通过显示当前节点的父节点来提供一种导航的方式。
虽然它不适合所有的应用,但是对于那些需要用户知道他们当前位置的应用来说,这是一个很好的选择。
5. 卡片式菜单(Card Menu):在这种方法中,每个节点都显示为一个卡片,用户可以点击卡片来打开或关闭它。
这种方法的优点是用户可以清楚地看到哪些节点是开放的,但是它可能会在层次很深的菜单上显得很混乱。
以上就是一些常见的实现树级菜单的方法,具体使用哪种方法取决于你的应用的需求和用户的习惯。
JQuery实现动态生成树形菜单有一个需求:菜单导航条需要依据不同的权限动态提取出来。
计划是将功能模块与用户权限之间的关系保持到一个配置表中。
所以功能菜单的话就需要动态提取出来再显示。
借助JQuery框架实现一段动态菜单显示的方案。
一、学习一款它的插件TreeView这个插件能够把无序列表转换成可展开与收缩的Tree。
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""/TR/html4/loose.dtd"><html><head><script src="/jquery-latest.js"></script><link rel="stylesheet"href="screen.css"type="text/css"/> <link rel="stylesheet"href="jquery.treeview.css"type="text /css"/><script type="text/javascript"src="jquery.treeview.js"></sc ript><script>$(document).ready(function(){$("#example").treeview();});</script></head><body><ul id="example"class="filetree"><li><span class="folder">Folder 1</span><ul><li><span class="file">Item 1.1</span></li></ul></li><li><span class="folder">Folder 2</span><ul><li><span class="folder">Subfolder 2.1</span><ul><li><span class="file">File 2.1.1</span></li><li><span class="file">File 2.1.2</span></li></ul></li><li><span class="file">File 2.2</span></li></ul></li><li class="closed"><span class="folder">Folder 3 (closed at start)</span><ul><li><span class="file">File 3.1</span></li></ul></li><li><span class="file">File 4</span></li></ul></body></html>可以参考:/Plugins/Treeview。
Flex中加载gif图片最近做一个东西,想要实现屏蔽罩的效果,可是发现Flex并不能原生支持gif 图片,是因为Flex中默认播放一帧,所以gif图片是静态的,不过在网上查询了一些资料,发现需要一个辅助插件才能使用gif图片。
这个辅助的插件网址是/p/as3gif/downloads/list,本人下载下来后将此文件制作为一个swc包(你可在此下载),这样每次使用时你只需要引用此swc包就可以了。
好了,现在上一个例子。
新建一个mxml文件gifPlayerDemo,代码如下所示:[html]view plaincopyprint?1.<?xmlversion xmlversion="1.0"encoding="utf-8"?>2.<s:Application xmlns:fx="/mxml/2009"3.xmlns:s="library:///flex/spark"4.xmlns:mx="library:///flex/mx"minWidth="955"minHeight="600"creationComplete="app_creationCompleteHandler(event)">5.6.<fx:Script>7.<![CDATA[8. import com.ldfsoft.flex.player.GIFPlayer;9.10. import mx.events.FlexEvent;11.12. private var myGifPlayer:GIFPlayer = new GIFPlayer(true);13.14. protected function app_creationCompleteHandler(event:FlexEvent):void15. {16. // TODOAuto-generated method stub17. var url:URLRequest=new URLRequest("images/460.gif");18. myGifPlayer.load(url);19. myGifPlayer.visible=true;20. img.source=myGifPlayer;21. }22.23. ]]>24.</fx:Script>25.26.<fx:Declarations>27.<!-- Place non-visualelements (e.g., services, value objects) here -->28.</fx:Declarations>29.30.<mx:Image id="img"x="27"y="10"width="292"height="291"/>31.</s:Application>运行效果如下所示:忘了,截图也是静态的哈。
Flex树形菜单动态加载 Flex Tree Dynamic Loading 1. 设计目标:
Flex中Tree动态加载,即在点击之后才加载下级目录的内容.
2. 概要设计:
Tree的属性:
dataDescriptor="{new CategoryTreeDataDiscriptor()}"
dataProvider="{Category.root}" id="treeCategory"
通过root对象与dataDescriptor提供给Tree数据.
初始化成功后即在Tree上监听函数:
treeCategory.addEventListener(TreeEvent.ITEM_OPEN, treeOpenHandler); 在TreeEvent.ITEM_OPEN发生之后,读取数据库或其他数据源的数据,以建立其
下级目录.
3. 实现代码:
在用户登录成功之后会立即读取数据并新建其对应的根目录,并将其赋值给静态变量Category.root.
为了提示用户目录正在加载,同时也作为已经加载过的标记,为每个新建的Category中加入一个fake Category;
实现方法: category的代码,在每次新建category的时候都会增加fake,当建立fake时不会增加.
view plaincopy to clipboardprint?
1.public class Category
2.{
3. public static var fake:Category = new Category(true);
4. bel = "Loading..";
5.
6. [Bindable]
7. public static var root : Category;
8.
9. public var id:int;
10. public var label : String;
11. public var subCats : ArrayCollection;
12. public var notes : ArrayCollection;
13. public var parent : Category;
14.
15. public function Category(isFake:Boolean=false) {
16. if(!isFake) {
17. addSubCat(fake);
18. }
19. }....
20.
treeOpenHandler:
如果为第一次展开[即其子目录只有一个,并且为fake],则读取数据源数据,建立其下级目录对象,将下级目录对象加入到该目录的子目录ArrayCollection 中.
1.//Tree响应函数,展开后读取子目录
2.private function treeOpenHandler(e:TreeEvent):void {
3. openingItem = e.item as Category;
4. (bel + " is opened");
5. if(openingItem == Category.fake) {
6. Alert.show("正在加载,请稍候...");
7. return;
8. }
9. if((openingItem as Category).subCats == null) {
10. return;
11. }
12. if((openingItem as Category).subCats.length !=1 || (opening
Item as Category).subCats[0] != Category.fake) {
13. return;
14. }
15. var sql:String =
16. "SELECT * FROM Cat WHERE user_ID=" + currentUser.id +
" AND " + "parent_ID=" + openingItem.id + ";";
17. SQLUtils.createAndExecuteStatement(conn,sql,null,loadSu
bCatsOk,loadSubCatsError);
18.}
19.
20. //当load正常时,运行,增加子目录,首先会删除fake.
21.private function loadSubCatsOk(e:SQLEvent):void {
22. var CatsFromDB:SQLResult = e.target.getResult();
23. if(CatsFromDB.data == null) {
24. openingItem.subCats.removeAll();
25. (bel + "没有子目
录");
26. return;
27. }
28. openingItem.subCats.removeAll();
29. for(var i:int=0; i<catsfromdb.data.length; i++)="" {="" var
="" subcat:category="new" category();="" subcat.id="CatsFromDB.
data[i].cat_ID;" bel="CatsFromDB.data[i].label;" subca t.parent="openingItem;" ("子目录名
称:"="" +="" catsfromdb.data[i].label);="" openingitem.addsubca t(subcat);="" }="" <="" pre=""></catsfromdb.data.length;>。