JavaScript – 使用JS / jQuery以编程方式实现回调

前端之家收集整理的这篇文章主要介绍了JavaScript – 使用JS / jQuery以编程方式实现回调前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,我正在写一个网络应用程序.几乎所有的事情都是客户端,服务器只是一个RESTful的界面.我使用jQuery作为我的框架选择,并在 Revealing Module Pattern中实现我的代码.

我的代码的线框基本如下所示:

(function($){
    $.fn.myplugin = function(method)
    {
        if (mp[method])
        {
            return mp[method].apply(this,Array.prototype.slice.call(arguments,1));
        }
        else if (typeof method === 'object' || ! method)
        {
            return mp.init.apply(this,arguments);
        }
        else
        {
            $.error('Method ' +  method + ' does not exist on $.myplugin');
        }
    };

    var mp =
    {
        init : function( options )
        {
            return this.each(function()
            {
                // stuff
            }
        },callbacks : {},addCallback : function(hook_name,cb_func,priority)
        {
            // some sanity checking,then push cb_func onto a stack in mp.callbacks[hook_name]
        },doCallbacks : function(hook_name)
        {
            if (!hook_name) { hook_name = arguments.callee.caller.name; }
            // check if any callbacks have been registered for hook_name,if so,execute one after the other
        }
    };
})(jQuery);

很简单,对吧?

现在,我们可以从内部以及从应用程序范围之外注册(多个,分层)回调.

什么是欺骗我:为了使整个事情尽可能的扩展,我必须诉诸于以下几点:

foo : function() {
    mp.doCallbacks('foo_before');
    // do actual stuff,maybe some hookpoints in between
    mp.doCallbacks('foo_after');        
}

我的应用程序中的每个功能都必须像这样开始和结束.这似乎不正确.

那么,JS向导的SO是什么呢?

解决方法

您可以编写一个将另一个函数作为参数的函数,并返回一个新函数,该函数调用该参数的钩子.例如:
function withCallbacks(name,func)
{
    return function() {
        mp.doCallbacks(name + "_before");
        func();
        mp.doCallbacks(name + "_after"); 
    };
}

那么你可以写下如下:

foo: withCallbacks("foo",function() {
    // Do actual stuff,maybe some hookpoints in between.
})

猜你在找的jQuery相关文章