function DataBinder(object_id){
//使用一个jQuery对象作为简单的订阅者发布者
var pubSub = jQuery({});
//我们希望一个data元素可以在表单中指明绑定:data-bind-<object_id>="<property_name>"
var data_attr = "bind-" + object_id,
message = object_id + ":change";
//使用data-binding属性和代理来监听那个元素上的变化事件
// 以便变化能够“广播”到所有的关联对象
jQuery(document).on("change","[data-" + data_attr + "]",function(evt){
var input = jQuery(this);
pubSub.trigger(message, [ $input.data(data_attr),$input.val()]);
});
//PubSub将变化传播到所有的绑定元素,设置input标签的值或者其他标签的HTML内容
pubSub.on(message,function(evt,prop_name,new_val){
jQuery("[data-" + data_attr + "=" + prop_name + "]").each(function(){
var $bound = jQuery(this);
if($bound.is("input,text area,select")){
$bound.val(new_val);
}else{
$bound.html(new_val);
}
});
});
return pubSub;
}
function User(uid){
var binder = new DataBinder(uid),
user = {
atttibutes: {},
//属性设置器使用数据绑定器PubSub来发布变化
set: function(attr_name,val){
this.attriures[attr_name] = val;
binder.trigger(uid + ":change", [attr_name, val, this]);
},
get: function(attr_name){
return this.attributes[attr_name];
},
_binder: binder
};
binder.on(uid +":change",function(vet,attr_name,new_val,initiator){
if(initiator !== user){
user.set(attr_name,new_val);
}
})
}
//JavaScript
var user = new User(123);
user.set("name","Wolfgang");
//html
<input type="number" data-bind-123="name" />
function DataBinder(object_id){
//创建一个简单地PubSub对象
var pubSub = {
callbacks: {}.
on: function(msg,calssback){
this.callbacks[msg] = this.callbacks[msg] || [];
this.callbacks[msg].push(callback);
},
publish: function(msg){
this.callbacks[msg] = this.callbacks[msg] || [];
for(var i = 0, len = this.callbacks[msg].length; i<lenli++){
this.callbacks[msg][i].apply(this,arguments);
}
}
},
data_attr = "data-bind-" + object_id,
message = object_id + ":change",
changeHandler = function(evt){
var target = evt.target || evt.srcElemnt, //IE8兼容
prop_name = target.getAttribute(data_attr);
if(prop_name && prop_name !== ""){
pubSub.publish(message,prop_name,target.value);
}
};
//监听变化事件并代理到PubSub
if(document.addEventListener){
document.addEventListener("change",changeHandler,false);
}else{
//IE8使用attachEvent而不是addEventListener
document.attachEvent("onchange",changeHandler);
}
//PubSub将变化传播到所有绑定元素
pubSub.on(message,function(vet,prop_name,new)_val){
var elements = document.querySelectorAll("[" + data_attr + "=" + prop_name + "]"),
tah_name;
for(var i = 0,len =elements.length; i < len; i++){
tag_name = elements[i].tagName.toLowerCase();
if(tag_name === "input" || tag_name === "textarea" || tag_name === "select"){
elements[i].value = new_val;
}else{
elements[i].innerHTML = new_val;
}
}
});
return pubSub;
}
//在model的设置器中
function User(uid){
//...
user = {
//...
set: function(attr_name,val){
this.attribute[attr_name] = val;
//使用“publish”方法
binder.publish(uid+ ":change", attr_name, val,this);
}
}
//...
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有