//双向绑定实例  <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" );

最新文章

  1. iOS自定义model排序
  2. 百度贴吧python吧抓取用户名和图片
  3. Yahoo, Steve blog
  4. C++ vector的用法
  5. python 按照一个字典的值来对这个字典进行排序
  6. Docker 空间大小设置 - 十
  7. Django表单介绍
  8. UI5-学习篇-6-SAP创建OData服务-RFC
  9. Selenium-ActionChainsApi接口详解
  10. python 实现九型人格测试小程序
  11. 关于ListView中getView被重复调用的问题
  12. pythonNetday06
  13. 钉钉开发笔记(三)MySQL的配置
  14. 深入解读TPC-C指标
  15. RocketMQ性能压测分析(转载)
  16. sql server数据库,禁用启用触发器各种情况!
  17. solrCloud选举leader的逻辑分析
  18. PHP函数之HTMLSPECIALCHARS_DECODE
  19. hadoop学习第四天-Writable和WritableComparable序列化接口的使用&amp;&amp;MapReduce中传递javaBean的简单例子
  20. OS---文件结构

热门文章

  1. Linux系统如何查看版本信息?
  2. Atom 基本使用
  3. HDU2846【字典树】
  4. HDU3279【水】
  5. 适合新手看的超详细CentOS Linux 7 安装Tomcat8过程
  6. HTTPS为什么更安全,请看这里
  7. python 之 函数 装饰器
  8. StringUtils中常用方法leftPad(),rightPad(),center()
  9. 笔记-JavaWeb学习之旅13
  10. maven - 安装目录详解