簡體   English   中英

jquery onSubmit、onComplete 等

[英]jquery onSubmit, onComplete, etc

我注意到 jQuery 中內置的很多工具,尤其是那些使用某種 ajax 的工具,都有諸如 onSubmit、onComplete 等鈎子。

是否有這種做法的名稱和表征它的約定?

這種做法的文化是 jQuery 社區的一部分,還是更大的 javascript 現象?

你能推薦一個使用這種方法構建工具的指南嗎?

是的,它被稱為觀察者設計模式。 就此而言,它與 JQuery 甚至 JavaScript 無關。 許多設計模式可以在大多數編程語言中實現。

DevShop是 javascript 的設計模式框架。 他們的觀察者模式是這樣的:

觀察者

(function(){
    DevShop.Me({
        Observer:function(obj){
            var observer=function(){
                this.onRegister=function(){};
                this.notify=function(eventName,observable){
                    this.observable=observable;
                    if(typeof this[eventName]==="function")
                        try{this[eventName]();}catch(e){}
                };
            };
            return DevShop.SingletonFactory({extend:observer,instance:obj});
        }
    });
})();

可觀察的

(function(){
    DevShop.Me({
        Observable:function(obj){
            var observable=function(){
                this.observers=[];
                this.addObserver=function(o){
                    if(typeof o==="function"||typeof o==="object"){
                        if(typeof o.notify==="function"){
                            this.observers.push(o);
                            if(typeof o.onRegister==="function")
                                try{o.onRegister();}catch(e){}
                        }
                    }
                };
                this.notifyObservers=function(eventName){
                    var size=this.observers.length;
                    for(var x=0;x<size;x++){
                        try{
                            this.observers[x].notify(eventName,this);
                        }catch(e){}
                    }
                };
            };
            return DevShop.SingletonFactory({extend:observable,instance:obj});
        }
    });
})();

您可以在此處閱讀有關觀察者設計模式的更多信息: http://en.wikipedia.org/wiki/Observer_pattern

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM