何时使用JQuery.Callbacks?
我查看了添加到jQuery1.7的新内容,发现它们现在有jQuery.Callbacks() 文档向您展示了如何使用jQuery.callbacks(),但没有任何我想使用它们的适用示例 似乎可以从回调列表中添加/删除回调,也可以执行jQuery.callbacks().fire(args),但这只会触发该列表中的所有回调。也许我遗漏了什么,但这似乎不是很有用 在我的脑海中,当我第一次看到这个新功能时,我认为您可以将它与键/值对一起使用。这将提供一种在应用程序中的单个位置管理回调函数的简单方法。差不多何时使用JQuery.Callbacks?,jquery,jquery-callback,jquery-1.7,Jquery,Jquery Callback,Jquery 1.7,我查看了添加到jQuery1.7的新内容,发现它们现在有jQuery.Callbacks() 文档向您展示了如何使用jQuery.callbacks(),但没有任何我想使用它们的适用示例 似乎可以从回调列表中添加/删除回调,也可以执行jQuery.callbacks().fire(args),但这只会触发该列表中的所有回调。也许我遗漏了什么,但这似乎不是很有用 在我的脑海中,当我第一次看到这个新功能时,我认为您可以将它与键/值对一起使用。这将提供一种在应用程序中的单个位置管理回调函数的简单方法。
$.callbacks.add("foo", myFunction);
$.callbacks().fire("foo", args);
例如,如果我想在函数末尾调用回调函数,我可以做如下操作
$.callbacks.add("foo", myFunction);
$.callbacks().fire("foo", args);
然而,看起来您无法启动特定的回调,您只能使用给定的参数启动所有回调,或者不启动任何回调
我所看到的最接近的一件事是能够为.fire()函数提供一个上下文来设置“this”属性
.fireWith(context, args)
但这也没什么帮助
我没有看到任何关于设置上下文的具体内容,但由于您可以传递任意数量的参数,这可能会很有用。您还可以制定自己的约定,将标志作为第一个参数传递,如果侦听器不打算处理剩余的参数列表,则让侦听器立即返回false 我遇到过这样的情况,类似的内容可能很有用,但却将bind()和trigger()用于自定义事件。想象一下,在某个消息处理系统(基于web的聊天室或电子邮件客户端)中,您正在轮询新消息的服务。其中一个功能可能是在某个范围内设置一个数字,或者在发生某些事情时显示一声咆哮。另一个可能是更新网格。使用触发器,您必须为每个侦听器触发事件,并从eventData“展开”传递的参数,使用回调,只需一次触发,并且您的侦听器是带有简单参数列表的简单javascript函数
回调并不完全是革命性的,但它将使代码变得更少、更干净。我正在开发一个包含大量业务逻辑和至少11个外部服务的应用程序。如果您可以使用回调之类的方法编写自己的流控制类和行为,而不是试图将自己的意愿强加给延迟的实现,那么这确实有助于保持事情的直截了当。当您使用相同的方法更新不同的DOM元素时,回调非常有用 下面是一个俗气的例子:
当你点击某个东西时,它会更新点击计数器和“上次点击”按钮。似乎
$。回调开始于一个实现细节:一种管理函数列表并使用相同参数调用给定列表中所有函数的方法。有点像C#,具有附加功能,例如可以传递的标志,以自定义列表的行为
一个很好的例子可能是jQuery在内部使用$.Callbacks
来实现它的ready
事件<代码>bindReady()
初始化回调列表:
readyList = jQuery.Callbacks( "once memory" );
请注意once
和memory
标志,它们确保回调列表只被调用一次,并且在调用列表后添加的函数将立即被调用
然后,ready()
将指定的处理程序添加到该列表中:
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
// Add the callback
readyList.add( fn );
return this;
}
最后,在DOM就绪时触发回调列表:
readyList.fireWith( document, [ jQuery ] );
所有ready
处理程序都是在同一文档的上下文中调用的,该文档对全局jQuery对象具有相同的引用。它们只能被调用一次,从那时起,传递给ready()
的附加处理程序将立即被调用,所有这些都是$提供的。回调
以进一步展开并消除一些混淆:
可能需要使用jQuery的$.Callbacks
的原因是多方面的:
所以(例如)如果你看:
trigger
、.on()
和.off()
,但是我发现jQuery.Callbacks
更适合任务,生成更干净的代码
以下是来自的示例代码段:
以及一个使用示例:
// Subscribers
$.Topic( "mailArrived" ).subscribe( fn1 );
$.Topic( "mailArrived" ).subscribe( fn2 );
$.Topic( "mailSent" ).subscribe( fn1 );
// Publisher
$.Topic( "mailArrived" ).publish( "hello world!" );
$.Topic( "mailSent" ).publish( "woo! mail!" );
// Here, "hello world!" gets pushed to fn1 and fn2
// when the "mailArrived" notification is published
// with "woo! mail!" also being pushed to fn1 when
// the "mailSent" notification is published.
/*
output:
hello world!
fn2 says: hello world!
woo! mail!
*/
我理解,只要您只有一个地方需要调用所有回调,就可以使用此功能。但在web应用程序中,情况几乎从未如此。大部分
// Subscribers
$.Topic( "mailArrived" ).subscribe( fn1 );
$.Topic( "mailArrived" ).subscribe( fn2 );
$.Topic( "mailSent" ).subscribe( fn1 );
// Publisher
$.Topic( "mailArrived" ).publish( "hello world!" );
$.Topic( "mailSent" ).publish( "woo! mail!" );
// Here, "hello world!" gets pushed to fn1 and fn2
// when the "mailArrived" notification is published
// with "woo! mail!" also being pushed to fn1 when
// the "mailSent" notification is published.
/*
output:
hello world!
fn2 says: hello world!
woo! mail!
*/