å°ãåã«ãªãªãŒã¹ãããjQuery 1.7ã®ããŒãžã§ã³ã§ãæ°ãã
Callbacksãªããžã§ã¯ããç»å ŽããŸãããããã«ã€ããŠã¯ãä»æ¥èª¬æããŸãã
å
¬åŒã®
jQuery.Callbacksããã¥ã¡ã³ãã§ã¯ãå€ç®çãªããžã§ã¯ããšããŠèª¬æããŠããŸããããã¯ãã³ãŒã«ããã¯é¢æ°ã®ãªã¹ãïŒã³ãŒã«ããã¯ã¯åã«ã³ãŒã«ããã¯ãšåŒã°ããŸãïŒããã³ãã®ãªã¹ãã管çããããã®åŒ·åãªããŒã«ã§ãã
ãã®ãªããžã§ã¯ãããŸã éçºæ®µéã«ãããšãã®æ©èœã調ã¹ãŸããããæåã¯ãªãªãŒã¹ããŒãžã§ã³ã«æ®ã£ãŠãããããå°ãå€ãã®å¯èœæ§ããã£ããšèšããªããã°ãªããŸããã ããšãã°ãçŸåšãå
fire()
åŒã³åºãã«å¯ŸããŠ1ã€ã®ã³ãŒã«ããã¯ã®ãã¥ãŒãäœæããæ¹æ³ã¯ãããŸããã ã©ããããjQueryããŒã ã¯ã³ãŒããå°ãçãããããšã決å®ããã©ã€ãã©ãªã®éã¿ãç¯çŽããããã«ãäžèŠãª/ããŸã䜿çšãããªããæ©èœãåé€ããŸããã ããã¯ãã³ãŒã«ããã¯ã®æŽå²ãžã®å°ããªäœè«ã§ããã以äžã§ã¯ãçŸåšå©çšå¯èœãªæ©èœã®ã¿ã説æããæçµçã«ã¯ããã®ãªããžã§ã¯ãã«å°ããªå¯èœãªæ¹åãèšè¿°ããŸãã
äºå®
ãã®æ°ããjQuery.Callbacksãªããžã§ã¯ãã®è©³çŽ°ãªèª¿æ»ãéå§ããåã«ããã®ãªããžã§ã¯ããå¿
èŠãªçç±ã«ã€ããŠè©³ãã説æããŸãã å€ãã®å ŽåãJavaScriptã³ãŒãã¯ã³ãŒã«ããã¯ã䜿çšããŸããããšãã°ãã¢ã¯ã·ã§ã³ã®å®äºåŸã«ã€ãã³ããçºçãããšãã«åŒã³åºãããé¢æ°ã§ããæãé¡èãªäŸã¯AJAXãªã¯ãšã¹ãã§ãã åæã«ãå€ãã®å Žåã1ã€ã®é¢æ°ã§ã¯ãªããäžåºŠã«è€æ°ã®é¢æ°ãåŒã³åºãå¿
èŠããããŸãïŒäœåã2ã3ã2ããŒã¹ããŸãã¯ãŸã£ãããªããã¯äºåã«ã¯ããããŸããïŒ-ããã¯ããç¥ãããã·ã³ãã«ãª
ããªãã¶ãŒããŒããã¿ãŒã³ã§ãã ãããŠããã®ãããªå Žåã«ã¯ãåé¡ã®jQuery.Callbacksãªããžã§ã¯ãã圹ç«ã¡ãŸãã jQueryèªäœã§ã¯ããã®ãªããžã§ã¯ãã¯jQuery.Deferredããã³jQuery.ajaxå
ã§äœ¿çšãããŸãïŒããŒãžã§ã³1.7以éïŒã ãŸããjQueryã®äœæè
ã¯ããã®ãªããžã§ã¯ããå
¬éããŠææžåããä»ã®éçºè
ãç¬èªã®ã³ã³ããŒãã³ããå®è£
ãããšãã«äœ¿çšã§ããããã«ããŸããã
ã³ã³ã¹ãã©ã¯ã¿ãŒïŒjQuery.CallbacksïŒãã©ã°ïŒ
ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããšãã³ãŒã«ããã¯ãªããžã§ã¯ããäœæãããŸãããã®ãªããžã§ã¯ãã«ã¯ãã³ãŒã«ããã¯ãªã¹ãã管çããããã®ããã€ãã®ã¡ãœããããããŸãã
flags
ãã©ã¡ãŒã¿ãŒã¯ãªãã·ã§ã³ã§ããããªããžã§ã¯ãã®æäœãã©ã¡ãŒã¿ãŒãèšå®ã§ããŸã;以äžã®ãã©ã¡ãŒã¿ãŒã®å¯èœãªå€ãæ€èšããŸãã
var callbacks = $.Callbacks();
äœæããã
callbacks
ãªããžã§ã¯ãã«ããªããžã§ã¯ãã®
callbacks
ã䜿çšããŠã
callbacks
é¢æ°ããªã¹ãã«è¿œå ãåé€ãåŒã³åºããå床åŒã³åºãïŒãªããžã§ã¯ãã®äœææã«çŠæ¢ãããŠããªãå ŽåïŒããªããžã§ã¯ãã®ç¶æ
ïŒæ¢ã«åŒã³åºãããããã©ããïŒã確èªã§ããŸãã
add()
ã
remove()
ã
fire()
ãªã©ãã³ãŒã«ããã¯ã¯ããªã¹ãã«è¿œå ãããé åºã§å®è¡ãããŸãã
ããã¯ãã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã®ãå®éã®ãã³ã³ã¹ãã©ã¯ã¿ã§ã¯ãªããããåŒã³åºããšãã«
new
æŒç®åã䜿çšããå¿
èŠã¯ãããŸããïŒç¡æå³ã§ãïŒã
ãã®ãããJSã®æšæºçãªæ¹æ³ã§ã¯ããªããžã§ã¯ããã³ãŒã«ããã¯ã®ã€ã³ã¹ã¿ã³ã¹ã§ãããã©ããã確èªããããšã¯ã§ããŸããã
if (obj instanceof $.Callbacks) { obj.add(fn); }
ifã®äžã®åŒã¯åžžã«falseãè¿ããŸãã ãã ãããã®ãªããžã§ã¯ãã®æ¢ç¥ã®ã¡ãœããã®1ã€ïŒãŸãã¯äžåºŠã«è€æ°ïŒã«äŸåããããšãã§ããŸããããšãã°ã次ã®æ¹æ³ã§ç¢ºèªã§ããŸãã
if (obj.fire) { obj.add(fn); }
å®éããã®é¢æ°å
ã§ã¯ãã¯ããŒãžã£ãŒã«äŸåããç¹å®ã®ã¡ãœããã»ããã䜿çšããŠéåžžã®JSãªããžã§ã¯ããäœæãããŸããããã¯ããã®ç䌌ã³ã³ã¹ãã©ã¯ã¿ãŒã®å€éšããã¢ã¯ã»ã¹ã§ããªããã©ã€ããŒãå€æ°ãèšå®ããããªãäžè¬çãªJavaScriptã¡ãœããã§ãã
ãŸãããã®ãããªç䌌ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãããã§ããã®ãªããžã§ã¯ãã®ã¡ãœããã¯åŒã³åºãã³ã³ããã¹ãïŒããããå±ãããªããžã§ã¯ãïŒã«äŸåããŸãããã€ãŸããã³ã³ããã¹ããå€æŽããããšãå¿é
ããã«å¥ã®ãªããžã§ã¯ãã®ããããã£ã«å®å
šã«å²ãåœãŠãããšãã§ããŸãã ããã¯
fire
ãé€ããã¹ãŠã®ã¡ãœããã«åœãŠã¯ãŸããŸããã³ã³ããã¹ãã«äŸåããã ãã§ããããªã¹ãããã³ãŒã«ããã¯ãå®è¡ããããã®ã³ã³ããã¹ããšããŠäœ¿çšããŸãã å Žåã«ãã£ãŠã¯ããã®ã¡ãœããã¯åã«å¯èœã§ã¯ãããŸããããã³ã³ããã¹ããå€æŽããŠå¥ã®ãªããžã§ã¯ãã®ããããã£
ãå²ãåœãŠã
å¿
èŠããããŸãã äŸïŒ
var c = $.Callbacks(), obj = {}; obj.register = c.add; obj.register(function() { console.log('fired'); }); c.fire();
æ
泚 ïŒä»¥éãã fire()
ã¡ãœãããåŒã³åºãããšããèšèã¯ã fireWith()
ã¡ãœãããå«ãããªã¹ãããã³ãŒã«ããã¯ãå®è¡ããåŒã³åºããæå³ããŸãã
flags
ã³ã³ã¹ãã©ã¯ã¿ãŒãã©ã¡ãŒã¿ãŒã¯ãã¹ããŒã¹ã§åºåããããã©ã°ãäœæããã
callbacks
ãªããžã§ã¯ããæ©èœãããªãã·ã§ã³ãæå®ã§ããè¡ã§ãã 次ã®ãã©ã°ããµããŒããããŠããŸãã
once-ã³ãŒã«ããã¯ã®ãªã¹ãã¯1åããå®è¡ã§ããªãããšã瀺ãã
fire()
ã¡ãœããã®2åç®ä»¥éã®åŒã³åºãã¯æ±ºå®çã§ã¯ãããŸããïŒé
延ãªããžã§ã¯ãã§è¡ãããããã«ïŒããã®ãã©ã°ãæå®ãããŠããªãå Žåã
fire()
ã¡ãœãããæ°ååŒã³åºãããšãã§ããŸã
ã¡ã¢ãª fire()
ã¡ãœããã®æåŸã®åŒã³åºãã®ãã©ã¡ãŒã¿ãŒãèŠããŠïŒãããŠãªã¹ãããã³ãŒã«ããã¯ãå®è¡ã
fire()
ã
fire()
ã¡ãœãããåŒã³åºãããåŸã«è¿œå ãããå Žåã察å¿ãããã©ã¡ãŒã¿ãŒã§è¿œå ãããã³ãŒã«ããã¯ãããã«å®è¡ããå¿
èŠãããããšã瀺ããŸãïŒé
延ãªããžã§ã¯ãã§è¡ãããŸãïŒ
unique-åã³ãŒã«ããã¯ããªã¹ãã«äžåºŠã ãè¿œå ã§ããããšã瀺ããŸãããªã¹ãã«ã³ãŒã«ããã¯ãç¹°ãè¿ãè¿œå ããããšããŠãäœãèµ·ãããŸããã
stopOnFalse-ãªã¹ãã®ã³ãŒã«ããã¯ã®ãããããã
fire()
åŒã³åºãã®çŸåšã®ã»ãã·ã§ã³å
ã§
false
è¿ããå Žåããªã¹ãããã®ã³ãŒã«ããã¯ãåæ¢ããããšã瀺ããŸãã
fire()
ã¡ãœãããžã®æ¬¡ã®åŒã³åºãã¯ãæ°ããã³ãŒã«ããã¯ãªã¹ãå®è¡ã»ãã·ã§ã³ãéå§ãããªã¹ãã®1ã€ã
false
ãçµäºãããŸã§ããããã¯åã³å®è¡ãããŸãã
æ¹æ³
以äžã«ãç°¡åãªèª¬æãå«ãã¡ãœããã®ãªã¹ãã瀺ããŸããäŸã¯å
¬åŒã®ããã¯ã«ããã次ã®ã»ã¯ã·ã§ã³ã®ã¡ãœããã®äžéšã§ãã äžè¬ã«ãã¡ãœããã¯éåžžã«ã·ã³ãã«ã§ãæåŸ
ã©ããã«åäœããŸãã
callbacks.addïŒã³ãŒã«ããã¯ïŒ ã¯ä»¥äžãè¿ããŸãïŒcallbacks-ã³ãŒã«ããã¯ããªã¹ãã«è¿œå ã
ãŸãããã®ã¡ãœããã®åŒæ°ã«ããã€ãã®é¢æ°ïŒè€æ°ã®åŒæ°ïŒãŸãã¯é¢æ°é
åïŒåæã«äž¡æ¹ïŒãæž¡ãããšãã§ãããã¹ããããé
åãæž¡ãããšãã§ããŸãã é¢æ°ã§ã¯ãªããã¹ãŠã®åŒæ°ïŒãŸãã¯é
åèŠçŽ ïŒã¯ãåã«ç¡èŠãããŸãã ã¡ãœããïŒãããšãã以äžïŒã¯ãã®åŒã³åºãã®ã³ã³ããã¹ããè¿ãã®ã§ãjQueryã§æ
£äŸãšãªã£ãŠããããã«ã1ã€ã®ãªããžã§ã¯ãã®è€æ°ã®ã¡ãœããã®åŒã³åºãã®ãã§ãŒã³ãé£ç¶ããŠæŽçã§ããŸãã
callbacks.removeïŒcallbacksïŒ ã¯ä»¥äžãè¿ããŸããcallbacks-ãªã¹ãããã³ãŒã«ããã¯ãåé€ã
ãŸããã³ãŒã«ããã¯ã2åè¿œå ãããå Žåã§ããäž¡æ¹ã®äœçœ®ããåé€ãããŸãã T.O. ãªã¹ãããã³ãŒã«ããã¯ãåé€ããã¡ãœãããåŒã³åºããšãè¿œå ãããåæ°ã«é¢ä¿ãªããã³ãŒã«ããã¯ããªã¹ãã«ãªãããšã確èªã§ããŸãã è€æ°ã®åŒæ°ãè€æ°ã®åŒæ°ãšããŠåæã«æž¡ãããšãã§ããŸããé
åãæž¡ãããšã¯ã§ããŸãããéé¢æ°ãžã®ãã¹ãŠã®åŒæ°ã¯ç¡èŠãããŸãã
callbacks.hasïŒã³ãŒã«ããã¯ïŒ æ»ãå€ïŒããŒã« -æå®ãããé¢æ°ãã³ãŒã«ããã¯ãªã¹ãã«ãããã©ããã確èªããŸãã
callbacks.emptyïŒïŒ æ»ãå€ïŒcallbacks-ã³ãŒã«ããã¯ãªã¹ããã¯ãªã¢ã
ãŸã ã
callbacks.disableïŒïŒ æ»ãå€ïŒcallbacks-ã³ãŒã«ããã¯ãªããžã§ã¯ãããåæãããŸããããã䜿çšãããã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯å€±æããŸãã ãã®å Žåããã¹ãŠã®ã¡ãœããã¯ãŸã£ããæ©èœããªããªããŸã
false
äœã«ãã€ãªãããŸãããhas-åžžã«
false
ãè¿ã
false
ã
callbacks.disabledïŒïŒ æ»ãå€ïŒboolean -
disable()
ãåŒã³åºããåŸã«ã³ãŒã«ããã¯ãªããžã§ã¯ããç¡å¹ãã©ããããã§ãã¯ãã
true
ãè¿ã
true
ã
callbacks.lockïŒïŒ æ»ãå€ïŒcallbacks-ã³ãŒã«ããã¯ãªã¹ãã®ãã©ã¡ãŒã¿ãŒãšå®è¡ã¹ããŒã¿ã¹ã«é¢é£ããã³ãŒã«ããã¯ãªããžã§ã¯ãã®çŸåšã®ç¶æ
ããã£ããã£ããŸãã ãã®ã¡ãœããã¯ã
ã¡ã¢ãªãã©ã°ã䜿çšããå Žåã«æå¹ã§ããã
fire()
ãžã®åŸç¶ã®åŒã³åºãã®ã¿ããããã¯ããããšãæå³ããŠããŸãã
å
·äœçã«ã¯ããã®ã¡ãœããã¯æ¬¡ã®ããã«æ©èœããŸãïŒ ã¡ã¢ãªãã©ã°ãæå®ãããŠããªãå ŽåããŸãã¯fire()
ã¡ãœãããåŒã³åºãããŠããªãå ŽåãæåŸã®ã³ãŒã«ããã¯ã»ãã·ã§ã³ããããã®ããããã«ãã£ãŠfalse
è¿ãfalse
äžæãããå Žåã lock()
åŒã³åºãã¯disable()
åŒã³åºããšåçã§ãïŒåŒã³åºãããããšã§ãïŒãã®å Žåã disabled()
åŒã³åºãã¯true
ãè¿ãtrue
ããã以å€ã®å Žåã fire()
åŸç¶ã®åŒã³åºãã®ã¿ããããã¯ãããŸã-ã³ãŒã«ããã¯ã®å®è¡ããè¿œå ãããã³ãŒã«ããã¯ã®å®è¡ãã©ã¡ãŒã¿ãŒã®å€æŽïŒ ã¡ã¢ãªãã©ã°ã®ååšäžïŒãè¡ãããŸããã
callbacks.lockedïŒïŒ æ»ãå€ïŒboolean -
lock()
ã¡ãœããã䜿çšããŠã³ãŒã«ããã¯ãªããžã§ã¯ããããã¯ãããŠãããã©ããã確èªãã
disable()
åŒã³åºãããåŸã«
true
ãè¿ã
true
ã
callbacks.fireWithïŒ[context] [ãargs]ïŒ æ»ãå€ïŒcallbacks-æå®ãããã³ã³ããã¹ããšåŒæ°ã䜿çšããŠããªã¹ãå
ã®ãã¹ãŠã®ã³ãŒã«ããã¯ã®å®è¡ãéå§ããŸãã
context-ã³ãŒã«ããã¯å®è¡ã®ã³ã³ããã¹ãïŒé¢æ°å
ã§
this
ãä»ã
this
ã¢ã¯ã»ã¹å¯èœãªãªããžã§ã¯ãïŒã瀺ããŸãã
args-ã³ãŒã«ããã¯ã«æž¡ãããåŒæ°ã®é
åïŒã€ãŸãé
åïŒã
callbacks.fireïŒåŒæ°ïŒ æ»ãå€ïŒcallbacks-ãã®ã¡ãœããã®åŒã³åºãã³ã³ããã¹ããšåŒæ°ã䜿çšããŠããªã¹ãå
ã®ãã¹ãŠã®ã³ãŒã«ããã¯ã®å®è¡ãéå§ããŸãã
arguments-åŒæ°ã®ãªã¹ãïŒ
fireWith()
ã¡ãœããã®ãããªé
åã§ã¯ãããŸããïŒã ã€ãŸã åŒã³åºãã³ã³ããã¹ããšã³ãŒã«ããã¯åŒæ°ã¯ã
fire()
ã¡ãœããã®ã³ã³ããã¹ããšåŒæ°ã§ãã
åããã©ã¡ãŒã¿ãŒãšã³ã³ããã¹ãã§ã³ãŒã«ããã¯ã®å®è¡ãåçã«éå§ããæ¹æ³ã®äŸïŒ
var callbacks = $.Callbacks(), context = { test: 1 }; callbacks.add(function(p, t) { console.log(this.test, p, t); }); callbacks.fireWith(context, [ 2, 3 ]);
ãªã¹ãããã®ã³ãŒã«ããã¯ã¯ããã®ãªã¹ãã«è¿œå ãããé åºã§å®è¡ãããŸãã æå®ããããã©ã°ã§ã³ãŒã«ããã¯ã
1åå®è¡ãããåŸããªã¹ãã¯ã¯ãªã¢ããã
ã¡ã¢ãªãã©ã°ãæå®ãããŠããªããã
false
ãè¿ã
false
ã§ã³ãŒã«ããã¯ãäžæãã
false
å Žåãã³ãŒã«ããã¯ãªããžã§ã¯ãã¯
disable()
ã¡ãœããã«ãã£ãŠç¡å¹ã«ãããŸãã
äŸ
äŸã§ãã©ã°ãã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããã ãã¹ãŠã®äŸã§æ¬¡ã®é¢æ°ã䜿çšããŸãã
function fn1( value ){ console.log( value ); } function fn2( value ){ fn1("fn2 says:" + value); return false; }
$ .CallbacksïŒïŒïŒ
var callbacks = $.Callbacks(); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
ãã©ã°ã¯ç€ºãããŠããŸãã-éåžžã«æåŸ
ãããåäœã§ãã
$ .CallbacksïŒ 'once'ïŒïŒ
var callbacks = $.Callbacks( "once" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
ããã§ã¯ãã¹ãŠãæ確ã§ã-ãã£ããäœãå®äºããŠããäœããããšããŠãäœãèµ·ãããŸããã ãªã¹ãã¯ãã§ã«ç¡å¹ã«ãªã£ãŠããŸãã
$ .CallbacksïŒ 'ã¡ã¢ãª'ïŒïŒ
var callbacks = $.Callbacks( "memory" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
ããã§ã¯ãããã»ã©è€éã§ã¯ãªãããã§ããæåã®å®è¡åŸãã³ãŒã«ããã¯ãè¿œå ãããã³ã«ããã«å®è¡ãããåã³ãªã¹ãå
šäœã®å®è¡ãåŒã³åºããŸãã åæã«ã1ã€ã®é¢æ°ããªã¹ãã«2åè¿œå ããŸãã-2åæ©èœããŸãã
$ .CallbacksïŒããŠããŒã¯ãïŒïŒ
var callbacks = $.Callbacks( "unique" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
ãã®å Žåãé¢æ°
fn1
ç¹°ãè¿ãã®è¿œå ã¯ç¡èŠãããŸããã
$ .CallbacksïŒ 'stopOnFalse'ïŒïŒ
var callbacks = $.Callbacks( "stopOnFalse" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
fn2
ã¯å®è¡ãã§ãŒã³ãäžæã
fn2
ããªããªã
false
è¿ã
false
ã
ãããã¯ç°¡åãªäŸã§ããããã©ã°ã®çµã¿åãããããã£ãŠã¿ãŸããããããå°ããããããã§ãããã
$ .CallbacksïŒ 'once memory'ïŒïŒ
var callbacks = $.Callbacks( "once memory" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
æåã®
fire()
ã®ã¿ãæ©èœããæ°ããã³ãŒã«ããã¯ã®è¿œå ã«ãããæåã®
fire()
ãã©ã¡ãŒã¿ãŒã䜿çšããå³æå®è¡ãè¡ãããããšãããããŸãã
$ .CallbacksïŒ 'once memory unique'ïŒïŒ
var callbacks = $.Callbacks( "once memory unique" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
ããã§çµæã¯åãã§ãã
äžæã®ãã©ã°ãæå®ããŠ
fn1
2åè¿œå ã
fn1
ããã2åç®ã¯ãã®é¢æ°ããªã¹ãã«è¿œå ããŸããããã³ãŒã«ããã¯ã®å®è¡åŸã«æå®ãããã©ã°ã
1å䜿çšãããšããªã¹ããã¯ãªã¢ããã
ã¡ã¢ãªãã©ã°ã¯ã³ãŒã«ããã¯ã®è¿œå ã瀺ããŸããªã¹ãã«é
眮ãããã«å³åº§ã«å®è¡ãããŸãããªã¹ãã¯ç©ºãªã®ã§ãé¢æ°ã®è¿œå ã¯åžžã«äžæã§ãã ãã ãã以äžã«ç€ºãããã«åã®ã³ãŒãã®4è¡ç®ãå€æŽãããšã
fn2
äžåºŠã ãå®è¡ãããŸãïŒ
äžæã®ãã©ã°ãªãã§ã¯3ã€ãå®è¡ãããŸãïŒåïŒïŒ
callbacks.add( fn2, fn2, fn2 );
$ .CallbacksïŒ 'once memory stopOnFalse'ïŒïŒ
var callbacks = $.Callbacks( "once memory stopOnFalse" ); callbacks.add( fn1 ); callbacks.fire( "foo" ); callbacks.add( fn2 ); callbacks.add( fn1 ); callbacks.fire( "bar" ); callbacks.remove( fn2 ); callbacks.fire( "foobar" ); console.log(callbacks.disabled());
false
è¿ããšãåŸç¶ã®ãã¹ãŠã®ã³ãŒã«ããã¯ããããã¯ããã
onceãã©ã°ãååšããå Žåãéåžžã¯ã³ãŒã«ããã¯ãªããžã§ã¯ããç¡å¹ã«ãªããŸãã
ãã©ã°ã®èãããããã¹ãŠã®çµã¿åãããæ€èšããããã§ã¯ãããŸãããæãèå³æ·±ãïŒéåžžã«åçŽã§ã¯ãªãïŒãéžæããã³ãŒã«ããã¯ã®åäœã説æããããšããŸããã æ®ãã®çµã¿åããã¯ãããšãã°ãã©ã³ã¯ã䜿çšããŠãåå¥ã«ãã¹ãã§ããŸãïŒ
http :
//jsfiddle.net/zandroid/JXqzB/çŽæãããæ¹å
ãã¡ãããæ¹åã¯çµ¶å¯Ÿã«å¿
é ã§ã¯ãªãããããããããçšåºŠãŸã§ã¯ãšãŠã€ããªãå³ããå€æããããšãããããŸããã
æ¹åã®ã¢ã€ãã¢ã¯ã
fire()
ã¡ãœããåŒã³åºããçç¥ãã代ããã«ã³ãŒã«ããã¯ãªããžã§ã¯ããé¢æ°ãšããŠäœ¿çšããããšã§ãã ãããè¡ãã«ã¯ã次ã®é¢æ°ãèšè¿°ããŸãã
(function($, undefined){ $.FCallbacks = function(flags, fns) { var i = $.type(flags) === 'string' ? 1 : 0, callbacks = $.Callbacks(i ? flags : undefined); callbacks.add(Array.prototype.slice.call(arguments, i)) return $.extend(callbacks.fire, callbacks, { fcallbacks: true }); }; })(jQuery);
ããã«èŠåŽããã«ã䜿çšäŸãèŠãŠã¿ãŸãããã
function fn1(p1, p2) { console.log('fn1 says:', this, p1, p2); } function fn2(p1, p2) { console.log('fn2 says:', this, p1, p2); } var callbacks = $.FCallbacks('once', fn1, rn2); callbacks.add(fn2); callbacks(2, 3);
ãŸããæ°ãããã³ã³ã¹ãã©ã¯ã¿ãŒãã«ã¯ã
add()
ãäœåã«åŒã³åºãããšãªãããã©ã¡ãŒã¿ãŒã®åæã³ãŒã«ããã¯ãããã«æž¡ãæ©äŒããããŸããã
ãŸããè·å Žã§ïŒ
jsfiddle.net/zandroid/RAVtFæ¥ããç¥æ¥ãè¿ããŠããæž
èŽããããšãããããŸããã
UPDïŒã³ã¡ã³ãããå€æãããšããã®ãªããžã§ã¯ããjQueryå
ã§ã©ã®ããã«äœ¿çšããããã«ã€ããŠã®æ
å ±ã¯ãŸã çç¥ãããŠããŸãã ãDeferredã«ãã-ããã¯ãã®ãããªãã¬ãŒã ã¯ãŒã¯ã§ã®ãã®ãããªã¡ãœããã®2åããŸãã¯ããã®ã³ãŒã«ããã¯ãå¿
èŠãªçç±-jQueryã©ã€ãã©ãªãããéãããã ãã§ãå®éã®ã¢ããªã±ãŒã·ã§ã³ãæãä»ããªããã«é¢ããã³ã¡ã³ã-ç§ã®æèŠã§ã¯ããããã¯ã³ã¡ã³ãã§ã¯ãããŸããåé¡ã®æ¬è³ªãç解ããã 以äžããã®ç¹ãæ確ã«ããŸãã
å®éã®äœ¿çš
ã³ãŒã«ããã¯ã¯å®éã«ã¯
éåžžã«å€ãã® jQuery 1.7+ãŠãŒã¶ãŒã«ãã£ãŠäœ¿çšãã
ãŠãã ãæ°ããæ©èœãäœæãããã£ããããéçºããŒã ã«ãã£ãŠç°¡åã«ãããŸããã§ããã ãã®è³ªåã®é£éãšè«çã¯éåžžã«ç°¡åã§ãïŒ
$.ajax()
ã¡ãœããã¯ã©ã€ãã©ãªã«å®è£
ãããŸãããããã®æ§è³ªäžãç¹å®ã®Deferredã®ã¢ããªã³ã«éããŸãã-éçºè
ã¯ã³ãŒããæ¹åããã¡ã€ã³ã®
$.ajax()
ã³ãŒããšã¯å¥ã«ç§»åã
$.ajax()
ãã¹ãã®åå©çšãšç°¡çŽ åã®å¯èœæ§ã®ããïŒãã®ã³ãŒããå
¬éããŸãããïŒã©ã€ãã©ãªãŠãŒã¶ãŒã«ã¢ã¯ã»ã¹ããŠææžåããŠãã ããïŒ-
$.Deferred
ã
é çªã«ã
$.Deferred
ã¯æåã¯2ïŒ
done()
ããã³
fail()
ïŒã§ããããçŸåšã¯
$.Deferred
å
éšã³ãŒããšããŠäœæãããã³ãŒã«ããã¯ãè¶
ãã3ã€ã®ïŒ+ãŸã
progress()
ïŒã¢ããªã³ã§ãã ãŸããéçºè
ã¯ãã®ã³ãŒããæ¹è¯ããŠ
$.Deferred
ããåé¢ãã
$.Deferred
ãä»ããŠåŸè
ãå®è£
ã
$.Callbacks
ïŒãšããã§ã
$.Deferred
ãœãŒã¹ã³ãŒãã¯ãããæ確ã§èªã¿ããããªããŸããïŒã
çµè«ïŒéçºè
ã¯ãæ°ããã圹ã«ç«ããªããæ©èœãè¿œå ããããšãäž»ãªç®æšãšããŠèšå®ãããæ¢åã®å
éšã³ãŒããæé©åããåæã«ã»ã«ã³ããªãå
¬éããŸãããããã»ã©æçšãªçµæã¯ãããŸããã ãããŠã
$.ajax()
ã䜿çšãããã³ã«-ãåç¥ã®ããã«ã
$.Deferred
ã䜿çšããããã
$.Deferred
ã䜿çšããŸãã ããã¯å®éã®äœ¿çšäŸã§ãã