网站首页 > 知识剖析 正文
导语
在软件开发中,MVC或者MVVM是经常被用到的设计模式。在web前端开发中,之前我们需要自己写许多代码来完成这项功能。而现在有许多优秀的类库可以帮我们实现这个功能。
许多优秀的前端框架都提供了强大的数据双向绑定的功能。比如 Ember.js, Angular.js, KnockoutJS。
如果我们在一些小型的项目中,只是希望某个功能区域有数据双向绑定的功能,是不是就非得使用这么重的框架呢?事实上,我们可以用jQuery来实现一个简单的数据双向绑定的功能。
从头开始做一个数据双向绑定并不是那么复杂。简单来说,需要实现下面三点:
- 我们需要指定View中的UI元素和数据中的属性对应关系。
- 我们需要监听View中的UI元素内容以及数据的变化。
- 最后就是我们需要把变化通知到所有与之绑定的数据或者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
作者:西瓜痞
- 上一篇: jQuery中的事件——事件绑定、合成事件
- 下一篇: jQuery基本操作 jquery基础
猜你喜欢
- 2024-11-10 详解jQuery(一) jqueryui
- 2024-11-10 web前端Jquery学习笔记一 jquery 前端
- 2024-11-10 select输入联想内容 selectinsert
- 2024-11-10 jquery为表单控件传值并提交表单 jquery提交表单调用serialize方法
- 2024-11-10 jQuery基本操作 jquery基础
- 2024-11-10 jQuery基础教程学习笔记(五)事件的绑定和解绑
- 2024-11-10 jQuery中的事件——事件绑定、合成事件
- 2024-11-10 前端开发培训JQuery标准教案 前端开发教学
- 2024-11-10 JS类库Jquery(二):优雅的使用JQuery写Ajax实现前后端完美交互
- 2024-11-10 好程序员web前端教程分享Jquery常见面试题
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)