我真的不太明白delegate
和promise
是什么。
据文件显示-
delegate
会将选择器和事件绑定到某种包装容器上,以便以后可以再次用于当前和未来。如果新加载的所有内容都匹配,items.promise()
会将内容重新映射回第一次绑定的时候。也许我并不真正理解这个promise方法。如果包装器仍然在那里,但包装器容器中的内容已经更改,和/或通过Ajax
重新加载,该怎么办?为什么事件不会像第一次绑定时那样触发或工作?
是的,我去过文档页面,我只是不能完全理解他们的解释。
发布于 2011-06-04 23:28:01
我被这个问题搞糊涂了。我想这是因为你被promise
和delegate
搞混了。它们实际上是完全不相关的jQuery特性。我将分别解释每一个:
delegate
delegate
是jQuery 1.4.2中引入的jQuery的一项功能。(对于jQuery 1.3中添加的live
特性,这是一种更好的方法)。它解决了修改DOM带来的一个特殊问题,特别是AJAX调用。
绑定事件处理程序时,将其绑定到选择。因此,您可以使用$('.special').click(fn)
将事件处理程序绑定到special
类的所有成员。您绑定到这些元素,因此如果您随后从这些元素中删除类,事件仍将被触发。相反,如果将类添加到元素中(或将新元素添加到DOM中),则不会绑定事件。
Javascript有一个功能可以缓解这种情况,称为“事件冒泡”。当一个事件被触发时,浏览器首先通知该元素该事件是在哪里产生的。然后它沿着DOM树向上移动,并通知每个祖先元素。这意味着您可以在DOM树的较高位置的元素上绑定事件处理程序,以及在任何子元素上触发的事件(即使是绑定处理程序时不存在的那些)。
delegate
是jQuery对此的实现。首先,选择一个父元素。然后指定一个选择器-只有原始元素与该选择器匹配时,才会运行处理程序。然后指定事件类型,如click
、submit
、keydown
,就像bind
一样。然后,最后指定事件处理程序。
$('#containingElement').delegate('a.special', 'click', function() {
alert('This will happen on all links with the special class');
});
promise
promise
是另一个相对较新的jQuery特性集。它是jQuery 1.5中引入的Deferred
概念的一部分。(我认为“延期”和“委托”在发音上的相似之处可能是造成混淆的原因。)这是一种抽象异步代码复杂性的方法。最好的例子是使用AJAX调用,因为$.ajax
返回的对象是一个Deferred
对象。例如:
$.ajax({
url: 'somepage.cgi',
data: {foo: 'bar'}
}).done(function() {
// this will be run when the AJAX request succeeds
}).fail(function() {
// this will be run when the AJAX request fails
}).always(function() {
// this will be run when the AJAX request is complete, whether it fails or succeeds
}).done(function() {
// this will also be run when the AJAX request succeeds
});
因此,它在许多方面与$.ajax
调用中的绑定成功处理程序相同,不同之处在于您可以绑定多个处理程序,并且可以在初始调用之后绑定它们。
异步处理的另一种情况是处理动画。您可以提供对函数的回调,但是使用类似于我上面提供的AJAX示例的语法来实现这一点会更好。
在jQuery 1.6中,此功能成为可能,而promise
是此实现的一部分。在jQuery选择上调用promise
,当对象中的所有动画都完成时,您将获得一个可以绑定事件处理程序的对象。
例如:
$('div.special').fadeIn(5000).promise().then(function() {
// run when the animation succeeds
}).then(function() {
// also run when the animation succeeds
});
同样,这在效果上与传统方法相似,但它增加了灵活性。您可以稍后绑定处理程序,也可以绑定多个处理程序。
摘要
基本上,delegate
和promise
之间没有什么重要的关系,但它们在现代jQuery中都是有用的特性。
https://stackoverflow.com/questions/6080050
复制相似问题