实现一个简陋的双向绑定

在上一篇实现一个简陋的MVC框架 的基础上实现双向绑定

效果图

 <input type="text" data-bind="age">
 <input type="text" data-bind="age" disabled>
new Controller(function (model){
    model.age.set(21);
});

代码:

function SubPub() {
    this.value = "";
    this.doms = [];
}
//类似于观察者中的publish
SubPub.prototype.set = function (value) {
    var self = this;
    self.value = value;
    //异步更新队列
    setTimeout(function () {
        self.doms.forEach(function (dom) {
            dom.value = value.toString();
        })
    },0)
}
//类似于观察者中的subscribe
SubPub.prototype.bind = function (dom) {
    this.doms.push(dom);
}

function Controller(callback) {
    var doms = document.querySelectorAll('[data-bind]');
    var model = {};
    doms.forEach(function (dom) {
        var data = dom.getAttribute('data-bind');
        //可能多个dom结点绑定同一变量
        model[data] = model[data] || new SubPub();
        model[data].bind(dom);
         //增加的代码,实现双向绑定
        dom.addEventListener('keyup',function () {
            model[data].set(dom.value);
        })
    })
    callback.call(this,model);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值