设计模式知识连载(38)---委托模式:

<body>


<h3>设计模式知识连载(38)---委托模式:</h3>
<p>
    多个对象接收并处理同一请求,他们将请求委托给另一个对象同一处理请求
</p>

<hr>

<div>
    <ul id = 'container'>
        <li>111</li>
        <li>222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
        <li>666</li>
        <span>aaa</span>
        <span>bbb</span>
        <span>ccc</span>
    </ul>
</div>
<hr>
<div id="article">
    <p>第一段文字</p>
</div>

<hr>

<div id="btn_container">
    <button id="btn">demo</button>
</div>


<script type="text/javascript">



    /**
    *   案例一:点击日历,方式一:初始
    */
    // var ul = document.getElementById('container') ;
    // var li = document.getElementsByTagName('li') ;
    // var i = li.length -1 ;
    // for(; i >=0; i--) {
    //  li[i].onclick = function() {
    //      this.style.backgroundColor = 'red' ;
    //  }
    // }

    /**
    *   案例一:点击日历,方式一:委托模式
    */
    var ul = document.getElementById('container') ;
    ul.onclick = function(e) {
        var e = e || window.event ;
        var target = e.target || e.srcElement ;
        if(target.nodeName.toLowerCase() === 'li') {
            target.style.backgroundColor = 'red' ;
        }
    }


    /**
    *   案例二:,方式一:
    */
    var article = document.getElementById('article') ;
    article.onclick = function(e) {
        var e = e || window.event ;
        var target = e.target || e.srcElement ;
        if(target.nodeName.toLowerCase() === 'p') {
            target.innerHTML = '段落内容已修改' ;
        }
    }
    var p = document.createElement('p') ;
    p.innerHTML = '这是我新增加的段落'
    article.appendChild(p) ;


    /**
    *   案例三:,方式一:初始
    */
    var g = function(id) {
        return document.getElementById(id) ;
    }
    // g('btn').onclick = function() {
    //  g('btn_container').innerHTML = '触发了事件' ;
    // } ;

    /**
    *   案例三:,方式二:进阶
    */
    // g('btn').onclick = function(e) {
    //  g('btn_container').innerHTML = '触发了事件' ;
    //  g('btn') = null ;
    // }

    /**
    *   案例三:,方式三:进阶
    */
    g('btn_container').onclick = function(e) {
        var e = e || window.event ;
        var target = e.target || e.srcElement ;
        if(target.id === 'btn') {
            g('btn_container').innerHTML = '触发了事件' ;
        }
    } ;

    /**
    *   案例四:数据分发,方式一:初始
    */
    // 请求banner模块数据
    $.get('./deal.php?q=banner', function(res) {
        // 处理banner模块逻辑
    }) ;
    // 请求aside模块数据
    $.get('./deal.php?q=aside', function(res) {
        // 处理aside模块逻辑
    }) ;
    // 请求article模块数据
    $.get('./deal.php?q=article', function(res) {
        // 处理article模块逻辑
    }) ;
    // 请求member模块数据
    $.get('./deal.php?q=member', function(res) {
        // 处理member模块逻辑
    }) ;
    // 请求message模块数据
    $.get('./deal.php?q=message', function(res) {
        // 处理message模块逻辑
    }) ;

    /**
    *   案例四:数据分发,方式二:进阶
    */
    var Deal = {
        banner : function() {
            // 处理banner模块逻辑
        },
        aside : function() {
            // 处理aside模块逻辑
        },
        article : function() {
            // 处理article模块逻辑
        },
        member : function() {
            // 处理member模块逻辑
        },
        message : function() {
            // 处理message模块逻辑
        },
    }
    $.get('./deal.php?', function(res) {
        // 数据拆包分发
        for(var i in res) {
            Deal[i] && Deal[i](res[i]) ;
        }
    }) ;
</script>    

</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值