js 双向绑定
2024-10-19 22:28:30
//双向绑定实例 <input name="" ng-bind-123="name" />
function DataBinder( object_id ) {
// Create a simple PubSub object
var pubSub = {
callbacks: {},
on: function( msg, callback ) {
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 < len; i++ ) {
this.callbacks[ msg ][ i ].apply( this, arguments );
}
}
},
data_attr = "ng-bind-" + object_id,
message = object_id + ":keyup", changeHandler = function( evt ) {
var target = evt.target || evt.srcElement, // IE8 compatibility
prop_name = target.getAttribute( data_attr ); if ( prop_name && prop_name !== "" ) {
pubSub.publish( message, prop_name, target.value );
}
}; // Listen to change events and proxy to PubSub
if ( document.addEventListener ) {
document.addEventListener( "keyup", changeHandler, false );
} else {
// IE8 uses attachEvent instead of addEventListener
document.attachEvent( "onkeyup", changeHandler );
} // PubSub propagates changes to all bound elements
pubSub.on( message, function( evt, prop_name, new_val ) {
var elements = document.querySelectorAll("[" + data_attr + "=" + prop_name + "]"),
tag_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;
} function User( uid ) {
// ...
var binder = new DataBinder( uid ), user = {
// ...
attributes: {},
set: function( attr_name, val ) {
this.attributes[ attr_name ] = val;
// Use the `publish` method
binder.publish( uid + ":keyup", attr_name, val, this );
},
get: function( attr_name ) {
return this.attributes[ attr_name ];
}
} binder.on( uid + ":keyup", function( evt, attr_name, new_val, initiator ) {
if ( initiator !== user ) {
user.set( attr_name, new_val );
}
}); return user;
} // javascript
var user = new User( 'test');
user.set( "name", "binding" );
最新文章
- iOS自定义model排序
- 百度贴吧python吧抓取用户名和图片
- Yahoo, Steve blog
- C++ vector的用法
- python 按照一个字典的值来对这个字典进行排序
- Docker 空间大小设置 - 十
- Django表单介绍
- UI5-学习篇-6-SAP创建OData服务-RFC
- Selenium-ActionChainsApi接口详解
- python 实现九型人格测试小程序
- 关于ListView中getView被重复调用的问题
- pythonNetday06
- 钉钉开发笔记(三)MySQL的配置
- 深入解读TPC-C指标
- RocketMQ性能压测分析(转载)
- sql server数据库,禁用启用触发器各种情况!
- solrCloud选举leader的逻辑分析
- PHP函数之HTMLSPECIALCHARS_DECODE
- hadoop学习第四天-Writable和WritableComparable序列化接口的使用&;&;MapReduce中传递javaBean的简单例子
- OS---文件结构