knockoutjs模板实现树形结构列表

发布时间 - 2026-01-11 02:35:01    点击率:

数据结构

/*数据*/
 var ko_vue_data=[
  {
   name: "总能耗",
   number:"0",
   energyone: 14410,
   energytwo: 1230,
   energythree: 1230,
   huanRatio: -36.8,
   tongRatio: 148.5,
   child: [
    {
     name: "租户电耗",
     number:"1",
     energyone: 14410,
     energytwo: 1230,
     energythree: 1230,
     huanRatio: -36.8,
     tongRatio: 148.5,
     child: []
    },
    {
     name: "公共用电",
     number:"2",
     energyone: 14410,
     energytwo: 1230,
     energythree: 1230,
     huanRatio: -36.8,
     tongRatio: 148.5,
     child: [
      {
       name: "暖通空调",
       number:"2.1",
       energyone: 14410,
       energytwo: 1230,
       energythree: 1230,
       huanRatio: -36.8,
       tongRatio: 148.5,
       child: [
        {
         name: "冷站",
         number:"2.1.1",
         energyone: 14410,
         energytwo: 1230,
         energythree: 1230,
         huanRatio: -36.8,
         tongRatio: 148.5,
         child: [
          {
           name: "冷水机组",
           number:"2.1.1.1",
           energyone: 14410,
           energytwo: 1230,
           energythree: 1230,
           huanRatio: -36.8,
           tongRatio: 148.5,
           child: []
          }
         ]
        },
        {
         name: "热力站",
         number: "2.1.2",
         energyone: 14410,
         energytwo: 1230,
         energythree: 1230,
         huanRatio: -36.8,
         tongRatio: 148.5,
         child: []
        }
       ]
      }
     ]
    }
   ]
  }
 ];

效果图

之前已经写过用Vue实现图上效果的方法,此篇为用knockout.js实现上图效果的方法,同样通过模板将数据绑定到页面。

模板代码

<script type="text/html" id="ko-temp">
 <div class="tem">
  <div class="tem-p" >
   <div data-bind="event:{click:$root.toggleClick}"><i data-bind="style:{'visibility':number!=0?'visible':'hidden'},text:number"></i><span data-bind="text:name"></span></div>
   <!--绑定数据-->
   <div><span data-bind="text:energyone"></span></div>
   <div><span data-bind="text:energytwo"></span></div>
   <div><span data-bind="text:energythree"></span></div>
   <!--绑定class,使数值显示出区分-->
   <div><span data-bind="css:{isgreen:huanRatio<0,isred:huanRatio>100},text:huanRatio+'%'"></span></div>
   <div><span data-bind="css:{isgreen:tongRatio<0,isred:tongRatio>100},text:tongRatio+'%'"></span></div>
  </div>
  <!--ko if:isFolder-->
  <div class="tem-c" data-bind="template:{name:'ko-temp',foreach: child}" ></div>
  <!--/ko-->
 </div>
</script>

请对比之前一篇Vue的方法,了解两种方式模板绑定方式的不同。

模板写完,在页面上使用模板。

html代码

<div class="component-div" data-bind="template:{name:'ko-temp',foreach: ko_vue_data()}"></div>

JavaScript代码

/*数据*/
 var ko_vue_data=[
  {
   name: "总能耗",
   number:"0",
   energyone: 14410,
   energytwo: 1230,
   energythree: 1230,
   huanRatio: -36.8,
   tongRatio: 148.5,
   child: [
    {
     name: "租户电耗",
     number:"1",
     energyone: 14410,
     energytwo: 1230,
     energythree: 1230,
     huanRatio: -36.8,
     tongRatio: 148.5,
     child: []
    },
    {
     name: "公共用电",
     number:"2",
     energyone: 14410,
     energytwo: 1230,
     energythree: 1230,
     huanRatio: -36.8,
     tongRatio: 148.5,
     child: [
      {
       name: "暖通空调",
       number:"2.1",
       energyone: 14410,
       energytwo: 1230,
       energythree: 1230,
       huanRatio: -36.8,
       tongRatio: 148.5,
       child: [
        {
         name: "冷站",
         number:"2.1.1",
         energyone: 14410,
         energytwo: 1230,
         energythree: 1230,
         huanRatio: -36.8,
         tongRatio: 148.5,
         child: [
          {
           name: "冷水机组",
           number:"2.1.1.1",
           energyone: 14410,
           energytwo: 1230,
           energythree: 1230,
           huanRatio: -36.8,
           tongRatio: 148.5,
           child: []
          }
         ]
        },
        {
         name: "热力站",
         number: "2.1.2",
         energyone: 14410,
         energytwo: 1230,
         energythree: 1230,
         huanRatio: -36.8,
         tongRatio: 148.5,
         child: []
        }
       ]
      }
     ]
    }
   ]
  }
 ];
 function addAttribute(dst){
  for(var i=0;i<dst.length;i++){
   var temp=dst[i];
   temp.isFolder=ko.observable(true);//默认展开
   for(var j=0;j<temp.child.length;j++){
    addAttribute(temp.child);
   }
  }
 }
 addAttribute(ko_vue_data);
 /*视图模型*/
 function viewModel() {
  var self=this;
  self.ko_vue_data=ko.observableArray(ko_vue_data);
  self.toggleClick=function (event) {//展开折叠效果
   window.event? window.event.cancelBubble = true : event.stopPropagation();
   var isFolder=event.isFolder();
   if(isFolder){
    event.isFolder(false);
   }else {
    event.isFolder(true);
   }
  }
 }
 ko.applyBindings(new viewModel());

css样式同之前一篇Vue的一致,在这里就不在赘述,如有需要可查看之前一篇。到此两种方式算是全部写完,在报表多的页面,对于以上代码,稍加修改即可复用,绑定数据非常方便。

总结

以上所述是小编给大家介绍的knockoutjs模板实现树形结构列表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# knockoutjs  # 模板  # knockoutjs树形结构列表  # javascript将扁平的数据转为树形结构的高效率算法  # vue.js与element-ui实现菜单树形结构的解决方法  # javascript如何用递归写一个简单的树形结构示例  # ReactJs实现树形结构的数据显示的组件的示例  # java、js中实现无限层级的树形结构方法(类似递归)  # AngularJS实现树形结构(ztree)菜单示例代码  # JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现  # 浅谈JavaScript构造树形结构的一种高效算法  # 绑定  # 两种  # 写完  # 小编  # 暖通空调  # 在这里  # 在此  # 如有  # 数据结构  # 给大家  # 到此  # 所述  # 写过  # 给我留言  # 感谢大家  # 图上  # 上图  # 复用  # 疑问请  # 有任何 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Linux系统命令中tree命令详解  EditPlus中的正则表达式实战(5)  如何选择PHP开源工具快速搭建网站?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel storage目录权限问题_Laravel文件写入权限设置  如何在局域网内绑定自建网站域名?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何在香港免费服务器上快速搭建网站?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel如何使用模型观察者?(Observer代码示例)  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何基于云服务器快速搭建网站及云盘系统?  Laravel如何配置和使用缓存?(Redis代码示例)  利用vue写todolist单页应用  如何在建站主机中优化服务器配置?  高端建站如何打造兼具美学与转化的品牌官网?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  用v-html解决Vue.js渲染中html标签不被解析的问题  手机网站制作与建设方案,手机网站如何建设?  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel如何配置Horizon来管理队列?(安装和使用)  如何用免费手机建站系统零基础打造专业网站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  简单实现Android文件上传  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  奇安信“盘古石”团队突破 iOS 26.1 提权  EditPlus中的正则表达式 实战(4)  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  网站建设保证美观性,需要考虑的几点问题!  JS去除重复并统计数量的实现方法  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  网页设计与网站制作内容,怎样注册网站?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  Laravel如何使用Service Container和依赖注入?(代码示例)  ,南京靠谱的征婚网站?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Python进程池调度策略_任务分发说明【指导】  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  做企业网站制作流程,企业网站制作基本流程有哪些?  如何在万网利用已有域名快速建站?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)