JavaScript设计模式(十八)【职责链模式】

<!DOCTYPE html>

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <title>职责链模式</title>

</head>

<body>
<div>
    职责链模式(Chain of Responsibility):解决请求的发送者与请求的接受者之间的耦合,通过职责链上的多个对象对分解请求流程,实现请求在多个对象之间的传递,直到最后一个对象完成请求的处理。
</div>
<div>
    <input type="type" name="nickname"><span></span>
    <input type="button" name="" value="验证">
</div>
这个职责链与我在Ross Harmes写的不一样,Ross Harmes写的类似于事件冒泡,而本章写的模块分类,方法调用。


<script type="text/javascript" title="请求模块">
    /**
         * 异步请求对象(简化)
         * @param data 请求数据
         * @param dealType 响应数据处理对象
         * @param dom 事件源
         */
    var sendData = function(data, dealType, dom) {
        var xhr = new XHLHttpRequest(),
            url = 'getData.php?mod=usreInfo';

        xhr.onload = function(event) {
            if (xhr.status >= 200 && xhr.status < 300 ||
                xhr.status == 304) {
                dealData(xhr.responseText, dealType, dom);
            } else {

            }
        };
        for (var i in data) {
            url += '&' + i + '=' + data[i];
        }
        xhr.open('get', url, true);
        xhr.send(null);
    };
</script>

<script type="text/javascript" title="响应数据适配模块">
    /**
         * 处理响应数据
         * @param data 响应数据
         * @param dealType 响应数据处理对象
         * @param dom 事件源
         *
         */
    var dealData = function(data, dealType, dom) {
        //对象toString方法简化引用
        var dataType = Object.prototype.toString.call(data);
        switch (dealType) {
            //输入框提示功能
        case 'sug':
            if (dataType === "[object Array]") {
                return createSug(data, dom);
                //将响应对象数据转化为数组
            } else if (dataType === "[object Object]") {
                var newData = [];
                for (var i in data) {
                    newData.push(data[i]);
                }
                return createSug(newData, dom);
            }
            return createSug([data], dom);
        case 'validate':
            return createValidateResult(data, dom);
            break;
        }
    };
</script>

<script type="text/javascript" title="创建组件模块">
    /**
         * 创建提示框组件
         * @param data  响应适配数据
         * @param dom 事件源
         */
    var createSug = function(data, dom) {
        var i = 0,
            len = data.length,
            html = '';
        for (; i < len; i++) {
            html += '<li>' + data[i] + '</li>';
        }
        dom.parentNode.getElementsByTagName('ul')[0].innerHTML = html;
    }

    /**
     * 创建校验组件
     * @param data 响应适配数据
     * @param dom 事件源
     */
    var createValidateResult = function(data, dom) {
        dom.parentNode.getElementsByTagName('span')[0].innerHTML = data;
    }
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值