knockoutjs模板实现树形结构列表

 更新时间:2017年07月31日 16:20:28   作者:yn_zihuatanejo  
这篇文章主要介绍了knockoutjs模板实现树形结构列表的实现代码,非常不错,具有参考借鉴价值,需要的朋友参考下吧

数据结构

/*数据*/
 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模板实现树形结构列表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Three.js利用dat.GUI如何简化试验流程详解

    Three.js利用dat.GUI如何简化试验流程详解

    dat.gui可以方便地向场景中添加控制条,随时调整参数。下面这篇文章主要给大家介绍了关于Three.js利用dat.GUI如何简化试验流程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • ES6新数据结构Set与WeakSet用法分析

    ES6新数据结构Set与WeakSet用法分析

    这篇文章主要介绍了ES6新数据结构Set与WeakSet用法,结合实例形式简单分析了Set与WeakSet的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2017-03-03
  • Javascript前端UI框架Kit使用指南之Kitjs简介

    Javascript前端UI框架Kit使用指南之Kitjs简介

    本文给大家简单介绍了一款优秀的Javascript前端UI框架--Kitjs,支持PC端以及手机开发领域,非常的全面,这里推荐给有需要的小伙伴。
    2014-11-11
  • ES6 Generator基本使用方法示例

    ES6 Generator基本使用方法示例

    这篇文章主要介绍了ES6 Generator基本使用方法,结合实例形式分析了ES6 Generator基本功能、使用方法与操作注意事项,需要的朋友可以参考下
    2020-06-06
  • three.js实现炫酷的全景3D重力感应

    three.js实现炫酷的全景3D重力感应

    这篇文章主要为大家详细介绍了three.js实现炫酷的全景3D重力感应,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • 鼠标滑在标题上显示图片的JS代码

    鼠标滑在标题上显示图片的JS代码

    这篇文章主要介绍了鼠标滑在标题上显示图片的JS代码,有需要的朋友可以参考一下
    2013-11-11
  • 页面定时刷新(1秒刷新一次)

    页面定时刷新(1秒刷新一次)

    页面定时刷新的示例想必大家也见到不少,在本文将为大家介绍的是,如何实现1秒刷新一次,感兴趣的朋友可以了解下本文
    2013-11-11
  • JS分页的实现(同步与异步)

    JS分页的实现(同步与异步)

    这篇文章主要介绍了JS分页的实现(同步与异步),需要的朋友可以参考下
    2017-09-09
  • JavaScript解八皇后问题的方法总结

    JavaScript解八皇后问题的方法总结

    在国际象棋的8*8棋盘上如何摆放8个皇后使任一皇后无法吃掉其他皇后的问题便是最初的八皇后问题,此后也被不断扩展而作为经典的算法题目,这里我们就来看一下JavaScript解八皇后问题的方法总结
    2016-06-06
  • 一文详解如何有效的处理Promise并发

    一文详解如何有效的处理Promise并发

    这篇文章主要为大家介绍如何有效的处理Promise并发示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论