mustache.js实现首页元件动态渲染的示例代码


Posted in Javascript onDecember 28, 2020

前言

在项目开发过程中,特别是OA类软件,会针对邮件/待办/公告等模块在主页面进行快捷查看的元件展示要求,类似效果如下

mustache.js实现首页元件动态渲染的示例代码

针对框架层面,我们可以进行后台的可视化配置,使用mustache.js在主页面进行动态渲染,避免了对主页面的繁琐的硬编码工作,同时针对每个信息展示的元件进行内部个性化处理

表结构

mustache.js实现首页元件动态渲染的示例代码

包含了元件名称,元件模板路径,元件列表数据路由,查看更多路由,启用/禁用等

可视化配置

mustache.js实现首页元件动态渲染的示例代码

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方法进行数据的填充,同时需要注意针对每个元件定义局部刷新的方法,避免操作完毕后针对主页面整体刷新

<body>
 <div id="app">
  <div id="maincontainer">
   <div class="rowcontainer">
    <div class="columncontainer">

    </div>
   </div>
  </div>
 </div>
 <script>
  loadcss(getRootPath() + "theme/" + GetSystemTheme() + "/main.css", true)
 </script>
 <script>
  var pageData = {
   ElementList: [],
   groupCount: 0,
   rowElementCount: 2
  };
  $(function () {
   BindElement();
  })

  function BindElement() {
   var param = {};
   CloudPost(param, GetRootPath() + "frame/extend/element/findMainPageElementList", function (res) {
    if (res.code == 0) {
     pageData.ElementList = res.data;
     var rowelementcount = pageData.rowElementCount
     var groupcount = pageData.ElementList.length % rowelementcount == 0 ? pageData
      .ElementList
      .length / rowelementcount : (parseInt(pageData.ElementList.length /
       rowelementcount)) +
      1;
     pageData.groupCount = groupcount;
     var MainHtml = "";
     for (var i = 0; i < groupcount; i++) {
      var RowHtml = " <div class='rowcontainer'>";
      for (var j = 0; j < rowelementcount && i * groupcount + j < pageData.ElementList.length; j++) {
       var id = "row_" + (i + 1) + "column_" + (j + 1);
       var ColumnHtml = "<div class='columncontainer' id='" + id + "'>"
       ColumnHtml += "</div>"
       RowHtml += ColumnHtml;
      }
      RowHtml += "</div>";
      MainHtml += RowHtml;
     }
     $("#maincontainer").html(MainHtml);

     for (var i = 0; i < groupcount; i++) {
      for (var j = 0; j < rowelementcount && i * groupcount + j < pageData.ElementList.length; j++) {
       var index = i * rowelementcount + j
       var element = pageData.ElementList[index];
       var id = "row_" + (i + 1) + "column_" + (j + 1);
       pageData.ElementList[index]["ElementID"] = id;
       var renderdata = {
        elementtitle: element.ElementName,
        elementmoreurl: element.ElementMoreUrl,
        elementid: id
       }
       //刷新事件存储

       pageData.ElementList[index]["RefreshEvent"] = function () {
        //请求数据
        CloudPost({}, GetRootPath() + element.ElementDataUrl,
         function (res) {
          if (res.code == 0) {
           //合并json
           for (var attr in res) {
            renderdata[attr] = res[attr];
           }
           var htmlcontent = Mustache.render(element.TemplatContent, renderdata);
           $("#" + id).html(htmlcontent);
          }
         })
       }
       //请求数据
       CommonRefresh(id);
      }
     }
    } else {
     OpenFail(res.data)
    }
   })
  }

  function CommonRefresh(id) {
   $(pageData.ElementList).each(function () {
    if (this.ElementID == id) {
     this.RefreshEvent();
    }
   })
  }
 </script>

</body>

到此这篇关于mustache.js实现首页元件动态渲染的文章就介绍到这了,更多相关mustache.js首页元件动态渲染内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
动态样式类封装JS代码
Sep 02 Javascript
JS获取农历日期具体实例
Nov 14 Javascript
JavaScript定义类的几种方式总结
Jan 06 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
jQuery .tmpl() 用法示例介绍
Aug 21 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
Vue.js实现立体计算器
Feb 22 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
Oct 27 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
Dec 28 #Javascript
vue中watch的用法汇总
Dec 28 #Vue.js
浅析vue中的nextTick
Dec 28 #Vue.js
js仿淘宝放大镜效果
Dec 28 #Javascript
JavaScript实现原型封装轮播图
Dec 27 #Javascript
JavaScript代码实现简单计算器
Dec 27 #Javascript
JavaScript实现雪花飘落效果
Dec 27 #Javascript
You might like
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
MooTools 1.2介绍
2009/09/14 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
详解 javascript对象创建模式
2020/10/30 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
2021/02/02 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
美工的岗位职责
2013/11/14 职场文书
生产部主管岗位职责
2014/01/06 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
中国世界遗产导游词
2015/02/13 职场文书
开国大典观后感
2015/06/04 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
Python3 类型标注支持操作
2021/06/02 Python
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers