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源码下载】
# 绑定
# 文档
# 等功能
# 递归
# 它不
# 回调
# 不满足
# 是一个
# 超轻
# 几个
# 列表中
# 可以用
# 遍历
# 不多
# 而在
# 一大
# 很高
# 也很
# 去做
# 会让
相关文章:
如何注册花生壳免费域名并搭建个人网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
常州企业网站制作公司,全国继续教育网怎么登录?
潮流网站制作头像软件下载,适合母子的网名有哪些?
实现点击下箭头变上箭头来回切换的两种方法【推荐】
建站主机无法访问?如何排查域名与服务器问题
网站制作模板下载什么软件,ppt模板免费下载网站?
如何用腾讯建站主机快速创建免费网站?
如何高效完成自助建站业务培训?
,交易猫的商品怎么发布到网站上去?
个人网站制作流程图片大全,个人网站如何注销?
如何在建站之星绑定自定义域名?
安云自助建站系统如何快速提升SEO排名?
海南网站制作公司有哪些,海口网是哪家的?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
音乐网站服务器如何优化API响应速度?
如何在IIS中新建站点并解决端口绑定冲突?
如何解决VPS建站LNMP环境配置常见问题?
c++怎么用jemalloc c++替换默认内存分配器【性能】
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
如何通过PHP快速构建高效问答网站功能?
如何有效防御Web建站篡改攻击?
建设网站制作价格,怎样建立自己的公司网站?
如何在阿里云虚拟服务器快速搭建网站?
,网页ppt怎么弄成自己的ppt?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
哈尔滨网站建设策划,哈尔滨电工证查询网站?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
建站之星如何保障用户数据免受黑客入侵?
如何在万网ECS上快速搭建专属网站?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
安徽网站建设与外贸建站服务专业定制方案
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
网站制作网站,深圳做网站哪家比较好?
建站之星备案流程有哪些注意事项?
nginx修改上传文件大小限制的方法
php json中文编码为null的解决办法
如何使用Golang安装API文档生成工具_快速生成接口文档
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何在阿里云购买域名并搭建网站?
建站之星在线客服如何快速接入解答?
ppt制作免费网站有哪些,ppt模板免费下载网站?
建站之星如何快速更换网站模板?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
制作公司内部网站有哪些,内网如何建网站?
如何设置并定期更换建站之星安全管理员密码?
如何快速生成橙子建站落地页链接?
网站app免费制作软件,能免费看各大网站视频的手机app?
*请认真填写需求信息,我们会在24小时内与您取得联系。