首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jquery的promise方法是如何工作的?

jquery的promise方法是如何工作的?
EN

Stack Overflow用户
提问于 2011-05-21 14:28:27
回答 1查看 42.1K关注 0票数 63

我真的不太明白delegatepromise是什么。

据文件显示-

  • delegate会将选择器和事件绑定到某种包装容器上,以便以后可以再次用于当前和未来。如果新加载的所有内容都匹配,items.
  • promise()会将内容重新映射回第一次绑定的时候。也许我并不真正理解这个promise方法。

如果包装器仍然在那里,但包装器容器中的内容已经更改,和/或通过Ajax重新加载,该怎么办?为什么事件不会像第一次绑定时那样触发或工作?

是的,我去过文档页面,我只是不能完全理解他们的解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-04 23:28:01

我被这个问题搞糊涂了。我想这是因为你被promisedelegate搞混了。它们实际上是完全不相关的jQuery特性。我将分别解释每一个:

delegate

delegate是jQuery 1.4.2中引入的jQuery的一项功能。(对于jQuery 1.3中添加的live特性,这是一种更好的方法)。它解决了修改DOM带来的一个特殊问题,特别是AJAX调用。

绑定事件处理程序时,将其绑定到选择。因此,您可以使用$('.special').click(fn)将事件处理程序绑定到special类的所有成员。您绑定到这些元素,因此如果您随后从这些元素中删除类,事件仍将被触发。相反,如果将类添加到元素中(或将新元素添加到DOM中),则不会绑定事件。

Javascript有一个功能可以缓解这种情况,称为“事件冒泡”。当一个事件被触发时,浏览器首先通知该元素该事件是在哪里产生的。然后它沿着DOM树向上移动,并通知每个祖先元素。这意味着您可以在DOM树的较高位置的元素上绑定事件处理程序,以及在任何子元素上触发的事件(即使是绑定处理程序时不存在的那些)。

delegate是jQuery对此的实现。首先,选择一个父元素。然后指定一个选择器-只有原始元素与该选择器匹配时,才会运行处理程序。然后指定事件类型,如clicksubmitkeydown,就像bind一样。然后,最后指定事件处理程序。

代码语言:javascript
复制
$('#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对象。例如:

代码语言:javascript
复制
$.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,当对象中的所有动画都完成时,您将获得一个可以绑定事件处理程序的对象。

例如:

代码语言:javascript
复制
$('div.special').fadeIn(5000).promise().then(function() {
    // run when the animation succeeds
}).then(function() {
    // also run when the animation succeeds
});

同样,这在效果上与传统方法相似,但它增加了灵活性。您可以稍后绑定处理程序,也可以绑定多个处理程序。

摘要

基本上,delegatepromise之间没有什么重要的关系,但它们在现代jQuery中都是有用的特性。

票数 205
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6080050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档