• 大叔手记(4):jQuery自定义绑定的魔法升级版


    jQuery自定义绑定

    首先让我们来看看jQuery的自定义绑定的使用方法,你可以使用bind或者live来订阅一个事件(当然1.7以后也可以使用on了),代码如下:

    $("#myElement").bind('customEventName',function(e){ ... });
    $(".elementsClass").live('customEventName',function(e){ ... });

    然后通过如下方式来触发事件:

    $("#myelement").trigger('customEventName');


    或者你也可以为自定义事件增加额外的参数,样例如下:

    $("#myelement").bind('customEventName',function(e,data){ if(data.custom) ... });
    $("#myelement").trigger('customEventName',{ custom: false });

    魔法升级

    所谓魔法升级,其实是想让整个程序所有的自定义事件能够自动注册并绑定jQuery上,然后执行的时候,所有注册该事件的模块都会执行。比如模块User.js里定义的UserUpdate方法和Blogs.js里定义的BlogUpdate方法都定义了在发布一篇博客的时候需要执行的function函数,整个时候我们可以通过注册统一的事件名称(例如BlogAdded)bind到jQuery指定的一个容器上(例如document)上,然后发布博客成功以后,执行$(document).trigger("BlodAdded")就OK了。

    下面我们给个通用的样例代码:

        var components = [User, Blog, Group, Friend, Topic, Photo];
    var eventTypes = ["AddComplete", "UpdateComplete", "DeleteComplete", "LockComplete", "UnLockComplete"];
    $.each(components, function(i,component) {
    $.each(eventTypes, function(i,eventType) {
    var handler = component[eventType];
    if (handler) $(document).bind(eventType, handler);
    });
    })

    然后每个js模块定义的代码安装如下格式:

        User= {
    AddComplete: function(e, data) {
    //...
    },
    UpdateComplete: function(e, data) {
    //...
    }
    }

    这样,不管在任何地方,如果我们需要的话,就可以使用jQuery的方式来触发我们的事件了:

    $(document).trigger("UpdateComplete", data); 


    通过这种方法,大家可以发现一个模块的method只能注册一个事件,那如果我们通过一个方法来注册多个事件触发的话,可以使用如下方式:

        var blogController = {
    blogAddOrUpdateComplete: function() {
    //...
    }
    }
    blogController.blogAddComplete = blogController.blogUpdateComplete = blogController.blogAddOrUpdateComplete;

    最后注意:本文只是展示一个简单的例子,不要混用不同module同一事件名称的用法哦,比如,User.js里的AddComplete和Blog.js里的AddComplete可能根本就没有关系,也就是说只处理自己相应的逻辑,这时候,就不应该统一处理这个事件,但如果要检测的东西是一样的话,就可以使用,比如DisableUserComplete,就可以通用,因为User模块需要处理禁用账户以后的操作,Blog模块可能也需要处理禁用账户以后的操作。

    结束语

    大叔手记:旨在记录日常工作中的各种小技巧与资料(包括但不限于技术),如对你有用,请推荐一把,给大叔写作的动力



  • 相关阅读:
    二进制,八进制,十进制,十六进制之间的转换
    Ajax
    JSP
    事务
    BDUtils
    LG. 1003 铺地毯
    Educational Codeforces Round 25
    POJ.3268 Silver Cow Party (Dijkstra)
    POJ.1797 Heavy Transportation (Dijkstra变形)
    POJ. 2253 Frogger (Dijkstra )
  • 原文地址:https://www.cnblogs.com/TomXu/p/2285469.html
Copyright © 2020-2023  润新知