实现类似微信通讯录对人进行a-z人名首字母分组效果。
1.
在data1中加入groupL字段(字段名随意),字段内容是服务端遍历进去的该条数据人名的首字母。
<!--[if !supportLists]-->2.<!--[endif]-->新建一个data2,groupName就是a-z和#,最多是27条数据。
3.list2设置过滤器filter属性 $row.val(‘groupL’) == val(‘groupName’) ,过滤出list2(即data1)的groupL字段与list1(即data2)中groupName相同的字段。
<!--[if !supportLists]-->4.<!--[endif]-->后台代码
/**
* 查询结果转换为.w文件能读取的jsondata格式
* */
public static JSONObject toJSON(Integer limit,Integer offset,List<Map<String, Object>> list){
//fellowbookList = this.userService.searchThinkFellowbookList(this.param);
//声明列名
String[] column = {"user_id","real_name","loginname","phone_number","token_id","ente_id","ente_name","groupL"};
//JSONObject json = new JSONObject();
//json 包括查出的数据jsTable 和 首字母集合groupN
JSONObject jsTable = new JSONObject();
//List groupN = new ArrayList();
//第一部分
// "@type" - 类型标识,"table"表明这个JSON是一个table结构的数据
jsTable.put("@type", "table");
//第二部分 // "userdata" - table的元信息
JSONObject jsUserData = new JSONObject();
jsUserData.put("idColumnName", "user_id");//ID列的名称
jsUserData.put("idColumnType", "String");//ID列的数据类型
/**********可以在下面列定义中包含包含ID列,并忽略ID列定义**********/
// "relationAlias" - 列名,以逗号分隔
String relationAlias = "";
String relationTypes = "";
for(int i = 0 ;i<column.length;i++){
relationAlias += column[i]+",";//+","+column[1]+","+column[2]+","+column[3];
relationTypes += "String,";
}
relationAlias = relationAlias.substring(0,relationAlias.length()-1);
relationTypes = relationTypes.substring(0,relationTypes.length()-1);
jsUserData.put("relationAlias", relationAlias);
// "relationTypes" - 列数据类型,与上面的列名对应,
// 支持的类型有String、Integer、Long、Float、Double、Decimal、Boolean、Date、Time、DateTime
jsUserData.put("relationTypes", relationTypes);
// "sys.count" - 总行数,用于分页的页数计算,仅当返回第一页数据(offset==0)时需要返回总行数
int count = list.size();
jsUserData.put("sys.count", count);
//第三部分 // "rows" - 行数据数组
JSONArray jsRows = new JSONArray();
// 第一行数据,每一行数据都是一个JSON结构
//分页
if(limit !=null && offset!=null){
int a = count-offset;
if(a>=limit){
count = limit+offset;
}else{
count = a+offset;
}
}else{
offset = 0;
}
for(int i=0;i<count;i++){
Map<String,Object> userMap = list.get(i);
if(userMap==null){
break;
}
JSONObject jsRow = new JSONObject();
JSONObject rowValue = new JSONObject();
for(int j=0;j<column.length;j++){
//如果值没有变化,则执行
rowValue = new JSONObject();
String columnvalue = "";
if("groupL".equals(column[j])){
columnvalue = ChineseToPinYin.getPinYinHeadChar(userMap.get("real_name").toString()).substring(0,1);
System.out.println("人名首字母:"+columnvalue);
//①构造一个模式.
Pattern p=Pattern.compile("[^a-z]");
//②建造一个匹配器
Matcher m = p.matcher(columnvalue);
//③进行判断,得到结果
boolean b = m.matches();
if(b){
columnvalue = "#";
}
//groupN.add(columnvalue);
}else{
if("".equals(userMap.get(column[j]))||userMap.get(column[j])==null){
columnvalue = "";
}else{
columnvalue=userMap.get(column[j]).toString();
}
}
rowValue.put("value", columnvalue);
jsRow.put(column[j], rowValue);
System.out.println("列名+value值:"+column[j]+",value:"+columnvalue);
}
//rowValue = new JSONObject();
//rowValue.put("recordState", "none");
//jsRow.put("userdata", rowValue);
System.out.println("jsRow:"+jsRow);
jsRows.add(jsRow);
}
System.out.println("jsRows:"+jsRows);
jsTable.put("userdata", jsUserData);
jsTable.put("rows", jsRows);
System.out.println("jsTable:"+jsTable);
//json.put("jsTable", jsTable);
//json.put("groupN", groupN)
return jsTable;
}
5.效果(没有数据的字母隐藏待改进,只实现基本功能)
********更新2:实现右侧字母列表点击跳转到对应字母*********
6.加入 右侧字母列表
js中加入this.keys:
var Model = function(){
this.callParent();
this.keys = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z' ,'#'];
};
源码中加入:(style中内容根据实际样式情况随意写)
<div class="x-key-index" align="right" xid="x-key-index" style="z-index:5;position:relative;float:right;width:3%;">
<div class="info" />
<ul data-bind="foreach: keys" style="text-align:center;">
<li class="x-key-item" data-bind="text:$object" dir="ltr" style="font-size:small;"/>
</ul>
</div>
7. 主list1中 的output 编辑其源码
<div component="$UI/system/components/justep/output/output" class="x-output" xid="output4" data-bind="attr:{id:val('groupName')}" bind-ref="ref('groupName')"></div>
加入data-bind="attr:{id:val('groupName')}" 动态设置id属性为当前遍历的字母(如‘a’),用于后边a标签href定位,组件不能支持直接写id。
8.加入组件a标签(随意位置,不让他显示只为后边做click事件)
<a xid="a1" href="#"></a>
9.为右侧边栏li标签设置click事件
Model.prototype.li3Click = function(event){
var self = this;
var data2 = self.comp('data2');
var row = event.bindingContext.$object;/*获得当前点击li标签的字母*/
var rows = data2.find(['groupName'], [row]);
if(rows.length>0){/*如果数据库有该字母则为a标签赋值并触发click事件*/
var togroup = this.getElementByXid("a1");
togroup.setAttribute("href","#"+row);
togroup.click();
}
};
***************目前还存在的问题****************
右侧边栏的字母可能会超过手机屏幕的长度 ,造成a-#显示不全
相关推荐
- **滚动同步**:实现类似微信通讯录的同步滚动效果,即当用户在字母列表中选择一个字母时,主列表自动滚动到相应字母的首项。 4. **优化与兼容**: - 考虑到移动设备的多样性,可能需要使用响应式设计,以适应...
微信小程序仿通讯录功能主要介绍的是如何在微信小程序中开发一个类似于手机通讯录的应用,其核心在于使用微信小程序的组件和API实现一个界面,能够模拟通讯录列表的展示和字母导航的交互功能。以下是该功能实现的几...
内容概要:本文详细介绍了环形振荡器(Ring VCO)和锁相环(PLL)的设计、仿真与测试方法。针对初学者,提供了从基础电路理论到具体实操步骤的全面指导,涵盖了Cadence软件的使用、PSS/PNOISE仿真、调谐曲线绘制、相位噪声优化以及眼图调试等方面的内容。文中不仅讲解了基本概念和技术要点,还分享了许多实用的操作技巧和常见问题解决方案,如如何正确设置仿真参数、优化相位噪声、处理电源纹波等问题。此外,还附赠了一份详细的ADE_XL用户指南,帮助读者深入理解和掌握相关技术。 适合人群:对模拟IC设计感兴趣的初学者及有一定基础的研发人员。 使用场景及目标:①掌握环形振荡器的基本原理及其在Cadence中的仿真方法;②学会如何进行调谐曲线、相位噪声等关键性能指标的仿真与优化;③提高解决实际工程问题的能力,如电源纹波抑制、眼图调试等。 其他说明:本文特别强调了实践经验的重要性,鼓励读者动手实践并在实践中不断积累经验。同时提醒读者注意一些容易忽视但至关重要的细节,如仿真参数的选择和特殊条件下可能出现的问题。
【java】基于Java+Springboot+Vue的社区医院管理系统(源代码+数据库+万字论文).zip
scratch少儿编程逻辑思维游戏源码-大盗之魂.zip
scratch少儿编程逻辑思维游戏源码-弹跳猫.zip
scratch少儿编程逻辑思维游戏源码-城堡逃脱.zip
内容概要:本文探讨了马里兰电池数据集及其在电池剩余寿命(RUL)预测中的应用,重点介绍了RNN(循环神经网络)和LSTM(长短期记忆网络)这两种深度学习模型的应用。文章首先概述了马里兰电池数据集的特点,它记录了电池在不同环境和使用条件下的关键指标变化,为电池寿命预测提供了宝贵的数据支持。接着,文章详细解释了RNN和LSTM模型的工作原理以及它们在处理序列数据方面的优势,特别是LSTM在处理长时间依赖关系时表现出色。随后,通过一个简单的Python代码示例,展示了如何使用Keras库构建LSTM模型来进行RUL预测,包括数据预处理、模型构建、编译、训练和预测的具体步骤。最后,文章总结了RNN和LSTM模型在电池RUL预测中的重要性和潜力,并展望了未来的研究方向。 适合人群:对电池技术和机器学习感兴趣的科研人员、工程师及学生。 使用场景及目标:适用于希望利用深度学习技术提升电池管理系统的准确性和效率的人群。主要目标是通过学习历史数据,预测电池未来的状态,从而为新电池设计和现有电池维护提供科学依据。 其他说明:文中提供的代码示例仅作为入门指南,实际应用中需要根据具体情况调整模型结构和参数设置,并可能需要高性能计算资源来加速训练过程。
scratch少儿编程逻辑思维游戏源码-道场战场:战斗模拟器.zip
内容概要:本文详细介绍了基于STM32的低压无感BLDC(直流无刷电机)方波方案的全功能版本。该方案采用未封装库的源码,支持脉冲注入用于识别电机转子初始位置,并兼容国产芯片。文中提供了详细的硬件设计(包括原理图、丝印图)、软件实现(特别是脉冲注入和换相逻辑),以及调试方法和技巧。此外,还讨论了霍尔接口的兼容性和自动校准流程,确保系统能够适应不同类型的电机负载。 适合人群:具有一定嵌入式开发经验的研发人员和技术爱好者,尤其是对无感BLDC电机控制系统感兴趣的工程师。 使用场景及目标:①深入理解无感BLDC电机控制的底层逻辑;②掌握脉冲注入和换相逻辑的具体实现;③学习如何优化硬件设计和调试技巧,提高系统的可靠性和性能。 其他说明:该方案不仅适用于学术研究,也可应用于实际产品开发,帮助开发者快速搭建稳定的无感BLDC电机控制系统。
内容概要:本文档是2025年R语言数据分析综合教程,详细介绍了从环境配置到实战案例的完整流程。首先,涵盖环境配置与基础操作,包括安装R语言及RStudio IDE、常用数据分析包的安装与加载、数据导入及基础操作如读取CSV/Excel文件、数据查看与清洗等。接着,深入数据探索与可视化,讲解单变量统计、多变量关系分析,并通过`ggplot2`包进行基础图表和高级图表绘制。然后,进入统计建模与高级分析部分,涉及线性回归模型的构建与评估、主成分分析的数据降维与可视化以及分类资料分析中的卡方检验等内容。最后,通过Palmer企鹅数据集分析和医疗数据分类分析两个实战案例,巩固所学知识。此外,还推荐了中文教程和实战拓展资源,如知乎专栏、CSDN文章、GitHub开源项目和Kaggle数据集等; 适合人群:对R语言数据分析感兴趣的初学者及有一定编程基础的数据分析师; 使用场景及目标:①掌握R语言环境搭建与基础操作技能;②学会利用R语言进行数据探索、可视化及统计建模;③通过实战案例提升解决实际问题的能力; 其他说明:文档内容循序渐进,理论与实践相结合,适合自学或教学使用,读者可根据自身需求选择重点学习内容。
少儿编程scratch项目源代码文件案例素材-日本牛奶广告动画.zip
少儿编程scratch项目源代码文件案例素材-黏糊糊的圣诞节.zip
内容概要:本文详细介绍了基于MATLAB/Simulink平台构建的模块化多电平(MMC)统一潮流控制器(UPFC)仿真模型。首先探讨了MMC子模块的基本结构和电容电压均衡算法,接着讨论了环流抑制方法以及线路侧控制策略。文中还提供了具体的参数配置建议,如子模块数量、电容值、IGBT开关频率等,并展示了仿真的典型效果,包括电压提升和传输功率增加。此外,文章强调了该模型在新能源并网场景中的重要性和实用性。 适合人群:电力系统工程师、科研人员、高校师生等对高压输电线路和潮流控制感兴趣的读者。 使用场景及目标:适用于需要理解和掌握UPFC工作原理及其在MATLAB中的具体实现的研究人员和技术人员。目标是帮助读者搭建能够正常运行的仿真模型,理解UPFC在提高电力系统稳定性和灵活性方面的作用。 其他说明:文中提供的代码片段和参数设置有助于读者快速上手进行相关实验。同时,文章提到的谐波分析和性能评估方法也为进一步优化模型提供了指导。
内容概要:本文详细介绍了如何利用Simulink搭建电力系统稳态仿真模型。首先从同步发电机的选择和参数设置入手,强调了惯性常数H和基底电压的重要性和具体配置方法。接着讨论了负荷模型的选择,推荐使用更贴近实际的ZIP负荷模型而非简单的恒定阻抗模型。然后深入探讨了潮流计算的关键步骤,特别是参考节点的设定及其对后续分析的影响。对于线路建模部分,则提倡采用分布参数线路模块并将其分割为多段以提高仿真的准确性。此外,还提到了一些高级应用,如启用相量仿真模式加速仿真速度以及应对可能出现的暂态不稳定情况的方法。最后鼓励尝试加入风电场元素,进一步研究新能源接入后的系统行为。 适合人群:从事电力系统研究、设计或维护的技术人员,尤其是那些希望深入了解Simulink工具箱在电力工程领域应用的专业人士。 使用场景及目标:适用于需要构建电力系统稳态仿真环境的研究项目或教学课程;旨在帮助用户掌握Simulink平台的基本操作技能,同时培养解决复杂电力网络问题的能力。 其他说明:文中提供了大量MATLAB/Simulink代码片段作为辅助材料,便于读者理解和实践相关概念和技术要点。
scratch少儿编程逻辑思维游戏源码-地牢爬行者.zip
少儿编程scratch项目源代码文件案例素材-南瓜小子.zip
少儿编程scratch项目源代码文件案例素材-日落之旅.zip
scratch少儿编程逻辑思维游戏源码-弹回的球.zip