<!DOCTYPE html>
<html lang="en" data-swq-app = 'app'>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="./js/jquery-1.9.1.min.js"></script>
</head>
<body>
<input type="text" data-swq-model="name">
<input type="text" data-swq-model="age">
<div>name:<span data-swq-bind="name"></span></div>
<div>age:<span data-swq-bind="age"></span></div>
<script>
(function(window){
//模仿angular的双向绑定
//需要一个发布者,也就是angular里面的$scope的存在,这里我取我的大名swq,是个对象
//需要订阅者数据容器
var swqArray = []; //订阅者数据容器
var swqNamesArray = ['name','age']; //存放订阅者标识容器,这边写死,实际上肯定需要动态获取
window.swq ={
scanTag : function (){
var swqController = $('[data-swq-app]:first');
// view层需要和model层绑定的元素进行事件绑定
var allModelView = swqController.find('[data-swq-model]');
allModelView.each(function(){
$(this).on('keyup',function(event){
var targetBind = $(this).data('swqModel');
var value = $(this).val();
if(targetBind && targetBind.length > 0){
swq[targetBind] = value;
}
});
});
// model层需要劫持绑定的进行绑定
$.each(swqNamesArray,function(index,value){
notifyProperty(value);
})
}
};
//数据的变化需要反映到视图上,因此要监听到数据的变化,js原生的defineProperty给我们提供了监听的可能,劫持更改数据,思路有点类似前端路由的实现思路,我监听到你某个操作但是我不做你的功能,我自己定义该做的事
function notifyProperty(name){
Object.defineProperty(swq,name,{
//劫持到set方法
set : function(newValue){
swqArray[name] = newValue;
// 实现model-view的同步
var $target = $('[data-swq-bind = "'+name+'"],[data-swq-model = "'+name+'"]');
if($target){
$target.each(function(){
var tagName = $(this)[0].tagName.toLowerCase();
if(tagName == 'input' || tagName =='select' || tagName =='textarea'){
$(this).val(newValue)
}else{
$(this).text(newValue)
}
})
}
},
//劫持到get方法,因为get方法已经被劫持,所以比如我们劫持了swq.name,那么swq.name就没有值了,所以我们给它返回值,返回值是存在订阅者数据容器里面的
get : function(){
return swqArray[name];
}
});
}
})(window);
swq.scanTag();//初始化,进行双向绑定
// 尚未实现的功能 ;
// 1.动态获取需要进行双向绑定的name
// 2.只实现了text文本的绑定,对象的绑定需要递归
// 3.脏查询机制还未实现,就是我们某些js后增加的需要双向绑定的name,没办法进行双向绑定了
// 4.angular双花括号解析表达式未实现<br>// 5.感觉还差得远,哪位大神看到有成熟的demo记得给链接!!!
</script>
</body>
</html>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有