knockoutjs模板实现树形结构列表


Posted in Javascript onJuly 31, 2017

数据结构

/*数据*/
 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: []
        }
       ]
      }
     ]
    }
   ]
  }
 ];

效果图

knockoutjs模板实现树形结构列表

之前已经写过用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模板实现树形结构列表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS 文字符串转换unicode编码函数
May 30 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
jQuery版本升级踩坑大全
Jan 12 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
Apr 01 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 Javascript
本地存储localStorage用法详解
Jul 31 #Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 #Javascript
ES6新特性:使用export和import实现模块化详解
Jul 31 #Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 #Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
Jul 31 #Javascript
详解React中的组件通信问题
Jul 31 #Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
Jul 31 #Javascript
You might like
Sony CFR 320 修复改造
2020/03/14 无线电
神族 Protoss 历史背景
2020/03/14 星际争霸
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
PHP学习笔记之二 php入门知识
2011/01/12 PHP
PHP获取url的函数代码
2011/08/02 PHP
深入php多态的实现详解
2013/06/09 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
基于jquery的表格排序
2010/09/11 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
django初始化数据库的实例
2018/05/27 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
业务经理的岗位职责
2013/11/16 职场文书
市场开发与营销专业求职信
2013/12/31 职场文书
安全生产计划书
2014/05/04 职场文书
2014年财政局工作总结
2014/12/09 职场文书
邀请函格式范文
2015/02/02 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
创业计划书之面包店
2019/09/17 职场文书