tree组件,以多层次列表的形式显示树形数据,即一个列表中只显示一个父的数据,在其中点击拥有子数据的节点,会在列表中显示出这个节点的所有子数据。
目录
一、综述
二、DOM结构
三、样式
四、属性
五、方法
六、事件
七、操作
八、案例
一. 综述
tree组件,以多层次列表的形式显示树形数据,即一个列表中只显示一个父的数据,在其中点击拥有子数据的节点,会在列表中显示出这个节点的所有子数据。它是继承自list组件,查看源码可以发现,展现方式实际上就是一种特殊的list组件和scrollView组件的组合,是专门用于显示树的同级列表显示的一种组件。比如组织机构的显示。
组件路径:/UI2/system/components/justep/tree
组件标识:$UI/system/components/justep/tree/tree
可实现以下功能:
- 1、树形数据展现——使用data组件
- 2、树形数据展现——使用bizData组件
- 3、数据来自不同的表,在每个表中,都不是树形数据——使用data组件
- 4、数据来自不同的表,在每个表中,都不是树形数据——使用bizData组件
二. DOM结构
- 典型dom结构1
<div component="$UI/system/components/justep/tree/tree" class="x-tree x-inner-scroll" xid="tree1" data="data" labelColumn="sFID" filter="filter条件" autoLoad="true" disablePullToRefresh="false" disableInfiniteLoad="false"> <div class="x-tree-head" xid="div1"> <ul component="$UI/system/components/bootstrap/breadcrumb/breadcrumb" class="breadcrumb" xid="ul1"/> </div> <div class="x-tree-content x-scroll-view" xid="div2"> <div component="$UI/system/components/justep/scrollView/scrollView" supportPullDown="true" supportPullUp="true" hScroll="false" vScroll="true" hScrollbar="false" vScrollbar="true" bounce="true" class="x-scroll" xid="scrollView1"> <div class="x-content-center x-pull-down container" xid="div3"> <i class="x-pull-down-img glyphicon x-icon-pull-down" xid="i1"/> <span class="x-pull-down-label" xid="span1">下拉刷新...</span> </div> <ul class="x-tree-template x-scroll-content" xid="treeTemplateUl1"> <li xid="li1"/> </ul> <div class="x-content-center x-pull-up" xid="div4"> <span class="x-pull-up-label" xid="span2">加载更多...</span> </div> </div> </div> </div>
三. 样式
- x-tree
tree的基础样式,必须存在
- x-inner-scroll
list内部出滚动条样式,不使用此class根据内容自增长
内部其他class说明
- x-tree-template
标示对应节点下的内容是模板,会根据data数据进行生成显示
- x-tree-link
切换树的节点,点击后进入子节点
四. 属性
组件具有公共属性,请参考组件公共属性
组件部分属性继承自list组件,请参考list组件属性
- labelColumn
[string]导航中显示的列
- rootLabel
[string]tree根节点名
五. 方法
组件具有公共方法,请参考组件公共方法
组件部分方法继承自list组件,请参考list组件方法
- get
object get(String name)
获取tree的属性,属性名称,取值范围::”limit”、”filter”、”rootLabel”,返回属性值
> 参数
name: [string]属性名称,取值范围:”limit”、”filter”、”rootLabel”
> 返回值
object
> 例:
//获取tree组件的根节点名 var rootLabel = this.comp(tree).get('rootLabel');
- set
void set(json arg)
设置属性值
> 参数
arg: [json]属性值对
> 结构如下:
{ "limit" : {integer} //一次显示数据条数,==-1时感知data数据, //data有多少数据显示多少数据,默认:-1 "filter": {string}//过滤条件表达式,表达式中可以使用$model,$object,$parent,$row //(执行过滤的数据行对象)变量 "rootLabel" {string} //tree根节点名 }
> 返回值
void
> 例:
//设置tree组件的根节点名称 this.comp('tree').set({ "rootLabel" : '根节点', });
- getBar
Breadcrumb getBar()
获取导航的Breadcrumb组件
> 参数
无
> 返回值
Breadcrumb
> 例:
//当加载数据后,用于修改标题 var bar = this.comp('demoTree').getBar(); bar.push({ label : '导航栏显示的值' });
六. 事件
- onBeforeLoadChildren
void onBeforeLoadChildren(object event)
加载子数据前执行的事件,可以设置cancel=true禁止加载
> 参数
event: [object]此参数封装了上下文中所需的一些变量
> 结构如下:
{ "source" : 组件的js对象, "bindingContext" : 组件绑定的上下文, 包含$model、$object等具体请参考bindingContext说明 "row" : 当前行对象 "data" : data组件对象 "cancel" : 忽略加载 }
> 返回值
void
> 例:
//可以设置cancel=true禁止加载 Model.prototype.demoTreeBeforeLoadChildren = function(event){ event.cancel = true; };
- onCustomLoadChildren
void onCustomLoadChildren(object event)
自定义加载子数据
> 参数
event: [object]此参数封装了上下文中所需的一些变量
> 结构如下:
{ "source" : 组件的js对象, "bindingContext" : 组件绑定的上下文, 包含$model、$object等具体请参考bindingContext说明 "row" : 当前行对象 "data" : data组件对象, "async" : 标识是否异步加载数据, "asyncCallBack" : 如果是异步加载数据,数据加载成功后调用回调 }
> 返回值
void
> 例:
//自定义加载子数据. Model.prototype.tree1CustomLoadChildren = function(event){ var data = event.data; data.refreshData({ parent: event.row, append:false }); }; //data组件的CustomRefresh中,event.options 就是刚刚调用refreshData方法传递过来的参数 Model.prototype.regionDataCustomRefresh = function(event){ // 树形数据逐级+分页加载,data.treeOption.delayLoad=true var data = event.source; // event.options.parent - 父节点的row var parent = event.options && event.options.parent; // event.options.append - 数据是否增量加载 var append = event.options && event.options.append; var params = { "columns" : Baas.getDataColumns(data), "limit" : event.limit, "offset" : event.offset, "parent" : parent && parent.getID() }; var success = function(resultData) { data.loadData(resultData, append, parent); }; Baas.sendRequest({ "url" : "/demo", "action" : "queryRegionTreeByParent", "params" : params, "success" : success }); };
七. 操作
- 无
八. 案例
1、树形数据展现——使用data组件
树形显示数据页面
- 添加一个data组件,用于存放地区的树形结构数据,需要特殊设置tree的属性
- 添加一个tree组件,设置属性绑定data,以及设置显示样式和字段
- data组件的onCustomRefresh方法实现加载数据
可以参考平台案例中的代码:
/UI2/demo/baas/treeDelayLoad/index.w
/UI2/demo/baas/treeData/index.w
<!--data树形结构设置--> <div component="$UI/system/components/justep/data/data" autoLoad="false" xid="regionData" idColumn="fID" isTree="true"<!--设置data组件为树形结构--> onCustomRefresh="regionDataCustomRefresh" limit="-1"> <!--设置dats的树形父关系为fParentID,并且一次性加载数据--> <treeOption xid="default1" parentRelation="fParentID" delayLoad="false"/> <column label="fID" name="fID" type="String" xid="default2"/> <column label="fName" name="fName" type="String" xid="default3"/> <column label="fParentID" name="fParentID" type="String" xid="default4"/> <column label="fType" name="fType" type="String" xid="default5"/> </div>
<!--树的展现--> <div component="$UI/system/components/justep/tree/tree" class="x-tree x-inner-scroll" xid="tree1" <!--绑定data组件,导航栏显示的是fName--> data="regionData" labelColumn="fName" rootLabel="根"> <div class="x-tree-head" xid="div4"> <ul component="$UI/system/components/bootstrap/breadcrumb/breadcrumb" class="breadcrumb" xid="ul1"/> </div> <div class="x-tree-content x-scroll-view" xid="div5"> <div component="$UI/system/components/justep/scrollView/scrollView" supportPullDown="true" supportPullUp="true" hScroll="false" vScroll="true" hScrollbar="false" vScrollbar="true" bounce="true" class="x-scroll" xid="scrollView1"> <ul class="x-tree-template x-scroll-content" xid="treeTemplateUl1"> <li xid="li1" class="x-tree-link"> <div component="$UI/system/components/justep/row/row" class="x-row x-row-center" xid="row1"> <div class="x-col" xid="col1"> <div component="$UI/system/components/justep/output/output" class="x-output" xid="output1" bind-ref="ref('fName')"/> </div> <div class="x-col x-col-fixed" xid="col4" style="width:auto;"> <a component="$UI/system/components/justep/button/button" class="btn btn-link btn-sm btn-only-icon" label="button" xid="button2" icon="icon-chevron-right" bind-visible="$object.val('fType')!='zone'"> <i xid="i3" class="icon-chevron-right"/> <span xid="span5"/> </a> </div> </div> </li> </ul> </div> </div> </div>
- data组件的onCustomRefresh方法实现加载数据
//data组件的onCustomRefresh方法实现加载数据 Model.prototype.regionDataCustomRefresh = function(event){ // 树形数据逐级+分页加载,data.treeOption.delayLoad=true var data = event.source; // event.options.parent - 父节点的row var parent = event.options && event.options.parent; // event.options.append - 数据是否增量加载 var append = event.options && event.options.append; var params = { "columns" : Baas.getDataColumns(data), "limit" : event.limit, "offset" : event.offset, "parent" : parent && parent.getID() }; var success = function(resultData) { data.loadData(resultData, append, parent); }; Baas.sendRequest({ "url" : "/demo", "action" : "queryRegionTreeByParent", "params" : params, "success" : success }); };
- data组件的onCustomRefresh方法通过bass调用后台的java代码如下
private static void queryRegionTree(ServletRequest request, ServletResponse response) throws SQLException, IOException, NamingException { // 参数序列化 JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params")); // 获取参数 Object columns = params.get("columns"); Table table = null; Connection conn = Util.getConnection(DATASOURCE_TAKEOUT); try { // 获取数据 table = Util.queryData(conn, TABLE_TAKEOUT_REGION, columns, null, "fID ASC", null, null, null); } finally { conn.close(); } // 转换为树形数据 table.setIDColumn("fID"); JSONObject tableJSON = Transform.tableToTreeJson(table, "fParentID"); // 输出返回结果 Util.writeJsonToResponse(response, tableJSON); }
2、树形数据展现——使用bizData组件
tree组件显示组织机构
- tree组件绑定bizData组件我们使用平台组织机构action,在BIZ层项目的process目录的model.config.xml文件中引用/SA/OPM/logic/action,然后process.m文件中,添加动作设置,引入queryOPOrgAction
- 关于组织机构的概念设置可以参考/BIZ/system/ontology/opm.ontology.m
- UI2层设置bizData为树形,代码结构如下
<div component="$UI/system/components/justep/data/bizData" xid="treeData" autoLoad="true" autoNew="false" concept="SA_OPOrg" isTree="true"> <reader action="/system/logic/action/queryOrgAction"/> <treeOption parentRelation="sParent" nodeKindRelation="sNodeKind" rootFilter=""/> </div>
- 设置tree组件绑定bizData组件,并设置树显示关系,根等属性,代码结构如下
<div component="$UI/system/components/justep/tree/tree" class="x-tree x-inner-scroll x-flex1" xid="tree1" rootLabel="组织管理" limit="8" data="treeData" labelRelation="sName" labelColumn="sName"> <div class="x-tree-head" xid="div4"> <ul component="$UI/system/components/bootstrap/breadcrumb/breadcrumb" class="breadcrumb" xid="breadcrumb1"/> </div> <div class="x-tree-content x-scroll-view" xid="div5"> <div component="$UI/system/components/justep/scrollView/scrollView" supportPullToRefresh="true" supportInfiniteLoad="true" hScroll="false" vScroll="true" hScrollbar="false" vScrollbar="true" bounce="true" class="x-scroll" xid="scrollView1"> <div class="x-content-center x-pull-down container" xid="div6"> <span class="x-pull-down-label" xid="span1">下拉刷新...</span> </div> <ul class="x-tree-template x-scroll-content" xid="treeTemplateUl1"> <li bind-css="{ currentRow: $model.treeData.currentRow.get() == $object }" class=" x-tree-link"> <div component="$UI/system/components/justep/output/output" class="x-output" xid="output1" data="treeData" bind-ref="ref('sName')" /> </li> </ul> <div class="x-content-center x-pull-up" xid="div7"> <span class="x-pull-up-label" xid="span2">加载更多...</span> </div> </div> </div> </div>
- data和bizData的比较:data组件是完全在UI层定义的,数据的存取可以使用baas或ajax等访问服务器,服务器后台代码需要自己手动实现,比较灵活。bizData是和BIZ层的的概念,action相互绑定的!简单的数据操作,biz层只需要创建概念,生成action以及UI2中的bizData设置属性后,就可以实现了。操作简单,安全,方便,手写代码比较少,可以节省大量的时间,提高了工作的效率
3、数据来自不同的表,在每个表中,都不是树形数据——使用data组件
不同的表中的数据加载
- 数据库表是BeX5自带的:库:x5demo。表:demo_province,demo_city,demo_zone
- data组件要设置为树形,代码结构如下:
<div component="$UI/system/components/justep/data/data" autoLoad="true" xid="data" idColumn="fID" onCustomRefresh="dataCustomRefresh" limit="5" isTree="true"> <treeOption delayLoad="true" parentRelation="fParent" xid="default1"></treeOption> <column label="fId" name="fID" type="String" xid="xid1"></column> <column label="fLevel" name="fLevel" type="Integer" xid="xid2"></column> <column label="fIsLeaves" name="fIsLeaves" type="Integer" xid="xid3"></column> <column label="fParentID" name="fParentID" type="String" xid="xid3"></column> <column label="fValue" name="fName" type="String" xid="xid4"></column> <column label="fIsLeaves" name="fIsLeaves" type="Boolean" xid="xid5"></column> </div>
- tree组件的设置代码结构如下:
<div component="$UI/system/components/justep/tree/tree" class="x-tree x-inner-scroll" xid="tree1" data="data" labelColumn="fName" rootLabel="行政区划"> <div class="x-tree-head" xid="div4"> <ul component="$UI/system/components/bootstrap/breadcrumb/breadcrumb" class="breadcrumb" xid="ul1"/> </div> <div class="x-tree-content" xid="div5"> <div component="$UI/system/components/justep/scrollView/scrollView" supportPullDown="true" supportPullUp="true" hScroll="false" vScroll="true" hScrollbar="false" vScrollbar="true" bounce="true" class="x-scroll" xid="scrollView1"> <div class="x-content-center x-pull-down container" xid="div6"> <i class="x-pull-down-img glyphicon x-icon-pull-down" xid="i1"/> <span class="x-pull-down-label" xid="span1">下拉刷新...</span> </div> <ul class="x-tree-template x-scroll-content" xid="treeTemplateUl1"> <li xid="li1" class="x-tree-link"> <div component="$UI/system/components/justep/row/row" class="x-row x-row-center" xid="row1"> <div class="x-col" xid="col1"> <div component="$UI/system/components/justep/output/output" class="x-output" xid="output1" bind-ref="ref('fName')"/> </div> <div class="x-col x-col-fixed" xid="col4" style="width:auto;"> <a component="$UI/system/components/justep/button/button" class="btn btn-link btn-only-icon" label="button" xid="button2" icon="icon-chevron-right" bind-visible="$object.val('fIsLeaves')==false"> <i xid="i3" class="icon-chevron-right"/> <span xid="span5"/> </a> </div> </div> </li> </ul> <div class="x-content-center x-pull-up" xid="div7"> <span class="x-pull-up-label" xid="span2">加载更多...</span> </div> </div> </div> </div>
- 数据刷新会执行到data组件的onCustomRefresh方法
Model.prototype.dataCustomRefresh = function(event){ // 树形数据逐级+分页加载,data.treeOption.delayLoad=true var data = event.source; // event.options.parent - 父节点的row var parent = event.options && event.options.parent; //判断如果是叶子节点就返回,不执行查询 if(data.getValue('fIsLeaves',parent)){ return; } // event.options.append - 数据是否增量加载 var append = event.options && event.options.append; var level = 1; //如果存在父,就加载父的下级数据,不存在父加载第一级的数据 if(parent){ level = data.getValue('fLevel',parent) + 1; } var params = { "columns" : Baas.getDataColumns(data), "limit" : event.limit, "offset" : event.offset, "parent" : parent && parent.getID(), "level" : level }; var success = function(resultData) { data.loadData(resultData, append, parent); }; Baas.sendRequest({ "url" : "/demo", "action" : "queryAreaByParent", "params" : params, "success" : success }); };
- data组件的onCustomRefresh方法通过bass调用后台的java代码如下
//定义常量分别表示数据源,和省市县三个表 private static final String DATASOURCE_AREA = "jdbc/x5demo"; private static final String TABLE_PROVINCE = "demo_province"; private static final String TABLE_CITY = "demo_city"; private static final String TABLE_COUNTY = "demo_zone"; private static void queryAreaByParent(ServletRequest request, ServletResponse response) throws SQLException, IOException, NamingException { // 参数序列化 JSONObject params = (JSONObject) JSONObject.parse(request.getParameter("params")); // 获取参数 Object columns = params.get("columns"); // 列定义 Integer limit = params.getInteger("limit"); Integer offset = params.getInteger("offset"); Integer level = params.getInteger("level"); String parent = params.getString("parent"); //为了防止在data组件中id重复,市和县的fID在前端经过处理,前面加上了他的父的id, //当查询县的时候,需要得到数据库中真正的fID。 if(level>2){ parent = parent.split("-")[1]; } String sql = null,sqlWhere=null,showTable = null; //根据级别判断,来决定访问那个数据库,返回值中返回自定义列fLevel和fIsLeaves switch(level){ case 1: sql = "select null as fParentID,1 as fLevel,false as fIsLeaves,fID,fName from " + TABLE_PROVINCE+" GROUP BY fID"; sqlWhere = ""; showTable = TABLE_PROVINCE; break; case 2: sql = "select fProvinceID as fParentID,2 as fLevel,false as fIsLeaves," +"concat_ws('-','"+parent+"',CONVERT(fID,char)) as fID,fName from " + TABLE_CITY+" where fProvinceID = "+parent+" GROUP BY fID"; sqlWhere = "where fProvinceID = "+parent; showTable = TABLE_CITY; break; case 3: sql = "select fCityID as fParentID,3 as fLevel,true as fIsLeaves," + "concat_ws('-','"+parent+"',CONVERT(fID,char)) as fID,fName from " + TABLE_COUNTY+" where fCityID = "+parent+" GROUP BY fID"; sqlWhere = "where fCityID = "+parent; showTable = TABLE_COUNTY; break; } Table table = null; Connection conn = Util.getConnection(DATASOURCE_AREA); try { table = Util.queryData(conn, sql, null, columns, offset, limit); //返回总数 if (offset != null && offset.equals(0)) { String sqlTotal = "SELECT COUNT(*) FROM "+showTable +" "+sqlWhere; Object total = Util.getValueBySQL(conn, sqlTotal, null); table.setTotal(Integer.parseInt(total.toString())); } } finally { conn.close(); } // 输出返回结果 Util.writeTableToResponse(response, table); }
4、数据来自不同的表,在每个表中,都不是树形数据——使用bizData组件
- 本案例中使用到bizData组件,需要调用action,我们以省市县的数据为案例,(建议所有概念和Action定义是在同一个应用模块下。本案例为了简易明了,单独做了一个应用,并在queryAction中使用SQL调用了系统案例的应用模块,可以这样做但并不推荐。)
- 在BIZ层创建一个应用,命名为treeBizData,在ontology目录上点右键,新建Ontology文件,定义概念和关系。
- 在标准动作设置,添加queryAction,并点击生成,生成自己的Procedure,点击代码,自己定义action的实现。里面使用到了系统案例模块:”/demo/common/data”来访问数据库的
//定义常量分别表示数据源,和省市县三个表 private static final String TABLE_PROVINCE = "DEMO_Province"; private static final String TABLE_CITY = "DEMO_City"; private static final String TABLE_COUNTY = "DEMO_Zone"; public static Table queryArea(String concept,String select,String from, String aggregate,String dataModel,String fnModel,String condition, List range,Boolean distinct,String idColumn,String filter,Integer limit, Integer offset,String columns,String orderBy,String aggregateColumns, Map variables){ int level = (Integer) variables.get("level"); String parent = (variables.get("parent")+""); // 当查询县的时候,需要得到数据库中真正的fID。 if (level > 2) { parent = parent.split("-")[1]; } String sql = null, sqlWhere = null, showTable = null; // 根据级别判断,来决定访问那个数据库,返回值中返回自定义列fLevel和fIsLeaves switch (level) { case 1: sql = "select null as fParentID,1 as fLevel,false as fIsLeaves,fID,fName from " + TABLE_PROVINCE+" GROUP BY fID limit "+offset+","+limit; sqlWhere = ""; showTable = TABLE_PROVINCE; break; case 2: sql = "select fProvinceID as fParentID,2 as fLevel,false as fIsLeaves," +"concat_ws('-','"+parent+"',CONVERT(fID,char)) as fID,fName from " + TABLE_CITY+" where fProvinceID = "+parent+" GROUP BY fID limit "+offset+","+limit; sqlWhere = "where fProvinceID = "+parent; showTable = TABLE_CITY; break; case 3: sql = "select fCityID as fParentID,3 as fLevel,true as fIsLeaves," + "concat_ws('-','"+parent+"',CONVERT(fID,char)) as fID,fName from " + TABLE_COUNTY+" where fCityID = "+parent+" GROUP BY fID limit "+offset+","+limit; sqlWhere = "where fCityID = "+parent; showTable = TABLE_COUNTY; break; } HashMap<String,String> sqlMap = new HashMap<String,String>(); sqlMap.put(DatabaseProduct.MYSQL.name(),sql); Table table = SQL.select(sqlMap, null, "/demo/common/data"); table.getProperties().put(Table.PROP_NAME_ROWID, "fID"); // 设置table的总行数,bizData分页需要 String countSql = "select count(*) from "+showTable+" "+sqlWhere; HashMap<String,String> countSqlMap = new HashMap<String,String>(); countSqlMap.put(DatabaseProduct.MYSQL.name(),countSql); Table countTable = SQL.select(countSqlMap, null, "/demo/common/data"); Iterator<Row> rows = countTable.iterator(); Row row = rows.next(); int count = row.getInt(0); table.getProperties().put(Table.PROP_DB_COUNT, count); return table; }
- process目录下新建process并添加动作设置,添加刚刚定义的action
- 对应的UI2层,新建.w文件,添加bizData,bizData上添加刚刚定义的概念和action,并制定树形,设置如下
<div component="$UI/system/components/justep/data/bizData" autoLoad="true" xid="treeData" concept="area" onRefreshCreateParam="treeDataRefreshCreateParam" isTree="true" limit="8" onBeforeRefresh="treeDataBeforeRefresh"> <reader xid="default1" action="/treeBizData/treeBizData/logic/action/queryAreaAction"> </reader> <treeOption xid="default2" parentRelation="fParentID"> </treeOption> </div>
- 在bizData的onRefreshCreateParam事件中传递参数给queryAction,在onBeforeRefresh方法中控制是否刷新数据
Model.prototype.treeDataRefreshCreateParam = function(event){ var data = event.source; // event.options.parent - 父节点的row var parent = event.options && event.options.parent; // event.options.append - 数据是否增量加载 var append = event.options && event.options.append; var level = 1; //如果存在父,就加载父的下级数据,不存在父加载第一级的数据 if(parent){ level = data.getValue('fLevel',parent) + 1; } var mapParam = new biz.Request.MapParam(); mapParam.put("parent", parent && parent.getID()); mapParam.put("level", level); event.param.setMap("variables", mapParam); }; Model.prototype.treeDataBeforeRefresh = function(event){ var data = event.source; // event.options.parent - 父节点的row var parent = event.options && event.options.parent; //判断如果是叶子节点就返回,不执行查询 if(data.getValue('fIsLeaves',parent)){ event.cancel = true; } };
- tree组件绑定bizData,并显示添加显示名称的组件,设置x-tree-link样式,
<div component="$UI/system/components/justep/tree/tree" class="x-tree x-inner-scroll" xid="tree1" data="treeData" labelColumn="fName" limit="8" rootLabel="地区"> <div class="x-tree-head" xid="div1"> <ul component="$UI/system/components/bootstrap/breadcrumb/breadcrumb" class="breadcrumb" xid="ul1"> </ul> </div> <div class="x-tree-content x-scroll-view" xid="div4"> <div component="$UI/system/components/justep/scrollView/scrollView" supportPullDown="true" supportPullUp="true" hScroll="false" vScroll="true" hScrollbar="false" vScrollbar="true" bounce="true" class="x-scroll" xid="scrollView1"> <div class="x-content-center x-pull-down container" xid="div5"> <i class="x-pull-down-img glyphicon x-icon-pull-down" xid="i2"></i> <span class="x-pull-down-label" xid="span1">下拉刷新...</span> </div> <ul class="x-tree-template x-scroll-content" xid="treeTemplateUl1"> <li xid="li2" class="x-tree-link"> <div component="$UI/system/components/justep/output/output" class="x-output" xid="output1" bind-ref="ref('fName')"> </div> </li> </ul> <div class="x-content-center x-pull-up" xid="div6"> <span class="x-pull-up-label" xid="span2">加载更多...</span> </div> </div> </div> </div>
- 配置config文件,并设置添加组织全县,就可以访问页面了。
源代码请参考版本中模型相关:
一次性加载树形数据:/UI2/system/components/justep/tree/demo/demo.w
逐级加载树形数据:/UI2/demo/baas/treeDelayLoad/index.w
本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5!
阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443
评一波