用jquery实现数据双向绑定

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');

该例子中,uid就是 data-bind-user="name" 中的 user ,绑定的页面元素会自动与user对应的属性关联。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,115评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 3,787评论 0 1
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 7,217评论 2 19
  • 身边的风景大多是美丽的 我想要停下来欣赏 却怕再也迈不开脚步……
    taeyangg阅读 181评论 0 0