您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

利用jQuery实现简单的数据双向绑定

时间:2019-09-04 11:15:40  来源:  作者:

导语

在软件开发中,MVC或者MVVM是经常被用到的设计模式。在web前端开发中,之前我们需要自己写许多代码来完成这项功能。而现在有许多优秀的类库可以帮我们实现这个功能。

许多优秀的前端框架都提供了强大的数据双向绑定的功能。比如 Ember.js, Angular.js, KnockoutJS

如果我们在一些小型的项目中,只是希望某个功能区域有数据双向绑定的功能,是不是就非得使用这么重的框架呢?事实上,我们可以用jQuery来实现一个简单的数据双向绑定的功能。

从头开始做一个数据双向绑定并不是那么复杂。简单来说,需要实现下面三点:

  1. 我们需要指定View中的UI元素和数据中的属性对应关系。
  2. 我们需要监听View中的UI元素内容以及数据的变化。
  3. 最后就是我们需要把变化通知到所有与之绑定的数据或者UI元素。

JAVAscript Code

function DataBinder (objectId) {
 // 使用jQuery空对象作为监听对象
 var pubSub = jQuery({});
 //
 var dataAttr = 'bind-' + objectId;
 var message = objectId + ':change';
 // 监听dom中所有元素的 data-binding 属性变化。并由pubSub来处理。
 $(document).on('input change', '[data-' + dataAttr + ']', function (event) {
 var $ele = $(this);
 console.log('$ele', $ele);
 pubSub.trigger(message, [$ele.data(dataAttr), $ele.val()]);
 });
 // pubSub把数据变化推送给所有与之绑定的页面元素
 pubSub.on(message, function (event, proName, newValue) {
 $('[data-' + dataAttr + '=' + proName + ']').each(function () {
 var $ele = $(this);
 if($ele.is('input, textarea, select')) {
 $ele.val(newValue);
 } else {
 $ele.html(newValue);
 }
 })
 });
 return pubSub;
}
function User(uid) {
 var binder = new DataBinder(uid);
 var user = {
 attributes: {},
 set: function (attrName, val) {
 this.attributes[attrName] = val;
 binder.trigger(uid + ':change', [attrName, val, this]);
 },
 get: function (attrName) {
 return this.attributes[attrName];
 },
 _binder: binder
 }
 return user;
}

调用的时候,用uid与之关联。

JavaScript Code

var user = new User('user');
$('#btnSet').bind('click', function (event) {
 user.set('name', 'Liuyuan211');
});

Html

<div class="item">
 <label>用户名:</label><input type="text" data-bind-user="name" /><span data-bind-user="name"></span>
</div>
<div class="item">
 <input type="button" id="btnSet" value="Set" />
</div>

该例子中,uid就是 data-bind-user="name" 中的 user ,绑定的页面元素会自动与user对应的属性关联。

题外话

如果项目中需要使用的数据绑定功能更复杂,knockout.js 库也是一个不错的选择

希望本文能帮助到您!

点赞+转发,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓-_-)

关注 {我},享受文章首发体验!

每周重点攻克一个前端技术难点。更多精彩前端内容私信 我 回复“教程”

原文链接:http://eux.baidu.com/blog/fe/use-jquery-to-achieve-a-simple-data-binding

作者:西瓜痞



Tags:jQuery   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
题目:实现论坛网站中常见的留言板功能,可以过滤敏感词汇,如图所示: 实现思路如下:在网页中写入一个空列表 ul, 监听 发布 按钮的点击事件,动态向 ul 中添加列表项。具体实现步骤:基...【详细内容】
2021-12-07  Tags: jQuery  点击:(31)  评论:(0)  加入收藏
入口函数 /*js加载完成事件*/ window.onload=function(){ console.log("页面和资源完全加载完毕"); } /*jQuery的ready函数*/ $(document).ready(function(){ co...【详细内容】
2021-11-12  Tags: jQuery  点击:(36)  评论:(0)  加入收藏
JQuery是一套Javascript脚本库.使用JQuery将极大的提高编写javascript代码的效率,让写出来的代码更加优雅,更加健壮. JQuery第一个版本JQuery1.0发布时间是2006年1月,目前最...【详细内容】
2021-06-24  Tags: jQuery  点击:(134)  评论:(0)  加入收藏
一 认识jQueryjQuery是JavaScript Query的缩写形式。jQuery是一款非常优秀的JavaScript库,即便是MVVM框架盛行的今天,也有超过半数的网页及应用直接或间接的使用了jQuery。jQu...【详细内容】
2021-03-15  Tags: jQuery  点击:(303)  评论:(0)  加入收藏
【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过 jquery mobile去设...【详细内容】
2020-08-19  Tags: jQuery  点击:(48)  评论:(0)  加入收藏
这里需要jquery-2.1.1.min.js文件,请自行下载,图片请自行下载首先,创建一个.html文件<!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><title></title><script s...【详细内容】
2020-08-05  Tags: jQuery  点击:(57)  评论:(0)  加入收藏
本文将详细解读JavaScript、ajax、jQuery是什么?他们可以实现什么?1、JavaScript定义:javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一种广泛用于客户端Web开...【详细内容】
2020-04-29  Tags: jQuery  点击:(55)  评论:(0)  加入收藏
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> <script type="text...【详细内容】
2019-12-09  Tags: jQuery  点击:(104)  评论:(0)  加入收藏
jQuery网页视频在线播放器代码特效说明:一款jQuery网页视频在线播放器代码免费下载,该播放器插件基于HTML5自带标签video制作,优化样式,使得各主流浏览器实现统一播放界面。(兼...【详细内容】
2019-10-29  Tags: jQuery  点击:(132)  评论:(0)  加入收藏
一、ajax的简介Ajax被认为是(Asynchronous(异步) JavaScript And Xml的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.同步是指:发送方发出数据后,...【详细内容】
2019-09-24  Tags: jQuery  点击:(120)  评论:(0)  加入收藏
▌简易百科推荐
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === &#39;a&#39;) { b = true} else { b = false}// goodb = a === &#39;a&#39;2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Mason程    Tags:JavaScript   点击:(6)  评论:(0)  加入收藏
给新手朋友分享我收藏的前端必备javascript已经写好的封装好的方法函数,直接可用。方法函数总计:41个;以下给大家介绍有35个,需要整体文档的朋友私信我,1、输入一个值,将其返回数...【详细内容】
2021-12-15  未来讲IT    Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
1. 检测一个对象是不是纯对象,检测数据类型// 检测数据类型的方法封装(function () { var getProto = Object.getPrototypeOf; // 获取实列的原型对象。 var class2type =...【详细内容】
2021-12-08  前端明明    Tags:js   点击:(23)  评论:(0)  加入收藏
作者:一川来源:前端万有引力 1 写在前面Javascript中的apply、call、bind方法是前端代码开发中相当重要的概念,并且与this的指向密切相关。本篇文章我们将深入探讨这个关键词的...【详细内容】
2021-12-06  Nodejs开发    Tags:Javascript   点击:(19)  评论:(0)  加入收藏
概述DOM全称Document Object Model,即文档对象模型。是HTML和XML文档的编程接口,DOM将文档(HTML或XML)描绘成一个多节点构成的结构。使用JavaScript可以改变文档的结构、样式和...【详细内容】
2021-11-16  海人为记    Tags:DOM模型   点击:(35)  评论:(0)  加入收藏
入口函数 /*js加载完成事件*/ window.onload=function(){ console.log("页面和资源完全加载完毕"); } /*jQuery的ready函数*/ $(document).ready(function(){ co...【详细内容】
2021-11-12  codercyh的开发日记    Tags:jQuery   点击:(36)  评论:(0)  加入收藏
一、判断是否IE浏览器(支持判断IE11与edge)function IEVersion() {var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isIE = userAgent.indexOf("comp...【详细内容】
2021-11-02  V面包V    Tags:Javascript   点击:(40)  评论:(0)  加入收藏
Null、Undefined、空检查普通写法: if (username1 !== null || username1 !== undefined || username1 !== &#39;&#39;) { let username = username1; }优化后...【详细内容】
2021-10-28  前端掘金    Tags:JavaScript   点击:(51)  评论:(0)  加入收藏
今天我们将尝试下花 1 分钟的时间简单地了解下什么是 JS 代理对象(proxies)?我们可以这样理解,JS 代理就相当于在对象的外层加了一层拦截,在拦截方法里我们可以自定义一些个性化...【详细内容】
2021-10-18  前端达人    Tags:JS   点击:(51)  评论:(0)  加入收藏
带有多个条件的 if 语句把多个值放在一个数组中,然后调用数组的 includes 方法。// bad if (x === "abc" || x === "def" || x === "ghi" || x === "jkl") { //logic } // be...【详细内容】
2021-09-27  羲和时代    Tags:JS   点击:(58)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条