全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

jquery dataview数据视图插件使用方法

jquery-dataview是一个超轻量的jquery插件,用于对DOM进行数据填充与更新,也很适合根据DOM模板创建对象。

与一些纯模板库(例如juicer)相比,它不仅能提供根据模板填入数据、支持循环、支持条件创建等功能,还支持绑定事件,最重要的是,在创建完DOM对象后,这些对象(称为数据视图)关联到原始数据,修改数据后,相应的视图也得以更新。

与一些支持数据驱动或MVVM模式的库(例如vue)相比,它没有去做数据绑定等高级自动化的机制,那涉及诸多复杂逻辑,比如属性依赖管理等,使用者如果了解不多,很可能写出低效的代码,或触发一连串未曾预料的后果。比如在一个列表中,只更新其中一条数据的某个属性,就可能导致刷新整个列表,甚至发起与后端的多次不必要交互。

jquery-dataview插件的设计理念是简单而灵活,它不采用极其复杂的自动化更新机制,而是允许人为精准控制更新时机与更新区域;同时,它最小化并压缩后仅2K不到,很适合在移动端开发使用。

下面介绍几个入门例子。

为DOM对象填充数据

例:对一个DOM赋值

HTML:

<div class="customer">
 <p>id=<span name="id"></span></p>
 <p>name=<span name="name"></span></p>
</div>

JS填充数据:

var customer = { id: 1001, name: "SAP AG" };
$(".customer").dataview(customer);

它会递归遍历所有带name属性的结点,如<span name="id"></span>会用customer.id为其赋值。

JS修改数据后,可无参数调用dataview来刷新显示:

customer.name = "SAP China";
$(".customer").dataview();

获取DOM绑定的数据:

var data = $(".customer").dataview('getData');

为模板填充数据

这个例子在项目中更加常用,展示根据模板创建DOM、填充数据并插入文档中。

HTML: 客户列表

 <div id="divCustomers"></div>

 <style type="text/template" id="tplCustomer">
  <div class="customer">
   <p>id=<span name="id"></span></p>
   <p>name=<span name="name"></span></p>
  </div>
 </style>

JS: 根据“客户”模板创建客户并插入列表中。

 var customers = [
  { id: 1001, name: "SAP AG" },
  { id: 2001, name: "Oracle CO" }
 ];
 var jtplCustomer = $($("#tplCustomer").html());
 var jparent = $("#divCustomers");
 $.each(customers, function (i, customer) {
  jtplCustomer.clone()
   .dataview(customer)
   .appendTo(jparent);
 });

循环创建、条件创建、条件显示

子对象数组可以以dv-for属性来指定循环展开。

dv-if及dv-show属性:根据该属性的值计算是否创建或显示该结点。

例:使用dv-for, dv-if, dv-show等标签:

HTML:

 <div id="divCustomers">
  <div dv-for="customers" dv-if="id>=1000" class="customer">
   <li>
    <span dv-show="id<=2000">id=<span name="id"></span></span>
    name=<span name="name"></span>
   </li>
  </div>
 </div>

JS:

 var data = {
  customers: [
   { id: 1, name: "Olive CO" },
   { id: 1001, name: "SAP AG" },
   { id: 2001, name: "Oracle CO" }
  ]
 };
 $("#divCustomers").dataview(data);

上例中,由data.customers子数组循环创建DOM,其中id=1的customer没有创建,因为不满足dv-if="id>=1000"的条件;而id=2001的那个customer由于不满足dv-show="id<=2000"的条件,因而id没有显示出来。

指定事件

dataview不仅绑定数据,还可以用dv-on属性绑定事件,在JS中使用选项events与其对应。

<div dv-on="liOrder_click"></div>

事件名必须是{对象名}_{事件名}的格式。
上面代码最终相当于调用jo.on("click", data, liOrder_click),绑定的数据会通过event.data传递给回调函数,因而在回调函数中处理数据特别方便。

用到的函数必须通过events选项定义:

var events = {
  liOrder_click: function (ev) {
   var order = ev.data; // 等同于 $(this).dataview('getData');
   // ...
  }
 };
jo.dataview(data, {events: events});

与直接使用原生支持的onclick属性相比,使用dv-on属性的好处是事件处理函数不必是全局函数,而且事件处理函数的参数ev.data即是DOM绑定的数据,非常方便。

多层嵌套的数据

对复杂的多层次嵌套数据的支持是dataview插件的一大亮点。
通过精巧的设计,它不仅做到填充数据时特别简单,而且在更新数据时,允许自由地更新任意区域,行为易懂且效率很高。

JS数据:一个customer-客户,它包含id, name等普通属性,包含一个子对象addr-地址信息,还包含一个子对象数组orders-订单。
每个订单中,又包含一个子对象数组items-物料信息。

 var customer = {
  id: 1001, 
  name: "SAP AG",
  addr: {country: "CN", city: "Shanghai"},
  orders: [
   {id: 1, amount: 9000, items: [
    {id: 101, name: "item 101"},
    {id: 102, name: "item 102"}
   ]},
   {id: 2, amount: 11000, items: [
    {id: 201, name: "item 201"}
   ]}
  ]
 }

HTML数据视图,展示客户、订单、物料三层数据:

 <div class="customer">
  <p> name: <span name="name"></span> </p>
  <p> addr: <span name="addr.country"></span> / <span name="addr.city"></span> </p>
  <ul>
   <li dv-for="orders" class="order">
    <p>order id=<span name="id"></span>, amount=<span name="amount"></span></p>
    <ul>
     <li dv-for="items" class="item">
      <p>item id=<span name="id"></span></p>
      <p>item name=<span name="name"></span></p>
     </li>
    </ul>
   </li>
  </ul>
 </div>

JS:

 $(".customer").dataview(customer);

 // 更新一些数据
 ++ customer.orders[0].amount;
 customer.orders[0].items[0].name += " - updated";

 // 视图局部更新:只更新一个item
 var jitem = $(".customer .order:first .item:first");
 jitem.dataview();

 // 取DOM绑定的item数据
 var itemData = jitem.dataview('getData');
 // 通过 $parent 取上层数据
 var orderData = itemData.$parent;
 var data = orderData.$parent;

 // 视图局部更新:只更新一个order:
 $(".customer .order:first").dataview();

 // 全部更新
 $(".customer").dataview();

上面只是多层次数据的简单的用法介绍,通过子对象的$parent属性可以取到上次对象。
实际使用时,常会把这些特性同计算属性、事件绑定结合起来,你会发现它会让取数据和更新视图的代码简单、灵活、易懂。

结语

作为一个超轻量级的具有数据驱动视图概念的库,推荐在项目中使用,可为让你的代码更清晰简练。
上面只是一个简单的介绍,更多如计算属性等功能可参考它的文档。

附github地址(其中有源码、文档和示例代码):

https://github.com/skyshore2001/jquery-dataview

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# jquery  # dataview  # 数据视图插件  # jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】  # 快速解决FusionCharts联动的中文乱码问题  # JSP FusionCharts Free显示图表 具体实现  # FusionCharts图表显示双Y轴双(多)曲线  # jQuery.Highcharts.js绘制柱状图饼状图曲线图  # jqPlot jQuery绘图插件的使用  # jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)  # 使用jQuery jqPlot插件绘制柱状图  # jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法  # 基于jQuery插件jqzoom实现的图片放大镜效果示例  # jQuery自适应轮播图插件Swiper用法示例  # jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】  # 绑定  # 文档  # 等功能  # 递归  # 它不  # 回调  # 不满足  # 是一个  # 超轻  # 几个  # 列表中  # 可以用  # 遍历  # 不多  # 而在  # 一大  # 很高  # 也很  # 去做  # 会让 


相关文章: 武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  定制建站策划方案_专业建站与网站建设方案一站式指南  如何通过多用户协作模板快速搭建高效企业网站?  javascript中的try catch异常捕获机制用法分析  c# 在ASP.NET Core中管理和取消后台任务  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  宁波自助建站系统如何快速打造专业企业网站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  建站10G流量真的够用吗?如何应对访问高峰?  如何快速生成专业多端适配建站电话?  建站之星代理如何获取技术支持?  高端云建站费用究竟需要多少预算?  如何快速使用云服务器搭建个人网站?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  已有域名如何快速搭建专属网站?  如何使用Golang安装API文档生成工具_快速生成接口文档  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何通过云梦建站系统实现SEO快速优化?  ,有什么在线背英语单词效率比较高的网站?  宁波免费建站如何选择可靠模板与平台?  ppt制作免费网站有哪些,ppt模板免费下载网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何选择域名并搭建高效网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  Android自定义控件实现温度旋转按钮效果  Thinkphp 中 distinct 的用法解析  建站之星×万网:智能建站系统+自助建站平台一键生成  如何选择最佳自助建站系统?快速指南解析优劣  建站OpenVZ教程与优化策略:配置指南与性能提升  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  建站主机与虚拟主机有何区别?如何选择最优方案?  建站之星伪静态规则如何设置?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  视频网站制作教程,怎么样制作优酷网的小视频?  建站之星安装需要哪些步骤及注意事项?  建站之星如何优化SEO以实现高效排名?  如何基于云服务器快速搭建网站及云盘系统?  建站之星如何快速更换网站模板?  制作证书网站有哪些,全国城建培训中心证书查询官网?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  c# 服务器GC和工作站GC的区别和设置  免费ppt制作网站,有没有值得推荐的免费PPT网站?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  如何配置IIS站点权限与局域网访问?  昆明网站制作哪家好,昆明公租房申请网上登录入口? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。