热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

jquerydataview数据视图插件使用方法

这篇文章主要介绍了jquerydataview数据视图插件使用方法,数据填充与视图更新利器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

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

下面介绍几个入门例子。

为DOM对象填充数据

例:对一个DOM赋值

HTML:

id=

name=

JS填充数据:

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

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

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

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

获取DOM绑定的数据:

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

为模板填充数据

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

HTML: 客户列表

 

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:

 
  • id= name=
  • 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与其对应。

    事件名必须是{对象名}_{事件名}的格式。
    上面代码最终相当于调用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数据视图,展示客户、订单、物料三层数据:

     

    name:

    addr: /

    • order id=, amount=

      • item id=

        item name=

    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

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


    推荐阅读
    • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
      Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
    • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
    • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
    • JavaScript 跨域解决方案详解
      本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
    • 利用Node.js实现PSD文件的高效切图
      本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
    • H5技术实现经典游戏《贪吃蛇》
      本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
    • 本文介绍了.hbs文件作为Ember.js项目中的视图层,类似于HTML文件的功能,并详细讲解了如何在Ember.js应用中集成Bootstrap框架及其相关组件的方法。 ... [详细]
    • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
    • Requests库的基本使用方法
      本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
    • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
      本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
    • 在Notepad++中配置Markdown语法高亮及实时预览功能
      本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ... [详细]
    • 本文详细介绍了如何在Oracle数据库中使用SQL进行分页查询,通过嵌套查询和ROWNUM函数的应用,实现数据的高效分页展示。 ... [详细]
    • 七大策略降低云上MySQL成本
      在全球经济放缓和通胀压力下,降低云环境中MySQL数据库的运行成本成为企业关注的重点。本文提供了一系列实用技巧,旨在帮助企业有效控制成本,同时保持高效运作。 ... [详细]
    • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
    • 在开发一个网页音乐播放器时遇到问题,需要从不同源读取MP3文件的ID3标签信息,包括流派、歌手和歌曲名称等。尝试使用PHP未果后转而考虑使用JavaScript进行跨域读取,但不清楚具体配置方法,寻求技术指导。 ... [详细]
    author-avatar
    mobiledu2502924293
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有