mustache.js实现首页元件动态渲染
前言
在项目开发过程中,特别是OA类软件,会针对邮件/待办/公告等模块在主页面进行快捷查看的元件展示要求,类似效果如下
针对框架层面,我们可以进行后台的可视化配置,使用mustache.js在主页面进行动态渲染,避免了对主页面的繁琐的硬编码工作,同时针对每个信息展示的元件进行内部个性化处理
表结构
包含了元件名称,元件模板路径,元件列表数据路由,查看更多路由,启用/禁用等
可视化配置
模板定义
这里的模板直接使用的html文件,方便css与js的修改,简单的使用了mustache.js进行模板数据绑定,当然也可以使用其他模板引擎
<div class="cellheadcontainer"> <span class="celltitletext">{{elementtitle}}</span> <div class="celltitleop"> <a style="color:white" class="morebtn" onclick="OpenMore('{{elementmoreurl}}')">更多</a> </div> </div> <div class="cellcontentcontainer"> {{#data}} <div class="notciecell" onclick="OpenDetail('{{title}}')"> <div class="noticeleft"> <span class="noticetitle noticeindex">{{index}}</span> <span class="noticetitle">{{title}}</span> </div> <div class="noticeright"> <span class="noticetip">{{publishuname}}</span> <span class="noticetip">{{publishdate}}</span> </div> </div> {{/data}} </div> <script> var noticeid = "{{elementid}}"; function OpenMore(url) { OpenTopDialog( '消息通知列表', url, 600, 800, BindNotcieList) } function BindNotcieList() { CommonRefresh(noticeid); } function OpenDetail(title) { OpenTopDialog('消息详情', "frame/demo/notice/noticeDetail", 600, 800, BindNotcieList, title) } </script>
主页面模板渲染
主要是针对当前配置的模板进行分组,渲染每行每列的元件,模板文字内容在后端处理获取完成,前端调用Mustache.render方法进行数据的填充,同时需要注意针对每个元件定义局部刷新的方法,避免操作完毕后针对主页面整体刷新