由于可以解析$.Deferred();
对象,并且许多人可以订阅done/always/fail
方法 -
我心想:"我可以将它用作发布者/订阅者......"
所以我做了一个简单的测试(JSBIN):
我有3个复选框:
我想在检查所有3个时显示警告:
var t = $.Deferred();
$(":checkbox").on('click',function (){
t.resolve("blabla");
});
t.done(function (val)
{
if($(":checkbox:checked").length==3) alert('ok');
});
但done
回调只解决了一次。
我能做些什么,这个代码将作为订阅者/发布者?
NB
我知道deferred
还有很多其他选择。但我的问题是关于deferred
(可以/不能用作pub / sub)。
答案 0 :(得分:1)
解析Deferred对象后,其状态将被视为已完成。但你是对的,有一个名为Deferred.progress的pubsub机制。当Deferred对象的状态逐渐变化时,通常会使用它,因此也应该跟踪这些渐变。
您可以使用Deferred.progress进行订阅,Deferred.notify(或Deferred.notifyWith,如果您想切换回调的上下文)以进行发布。特别是你的代码可能是这样编写的:
var t = $.Deferred();
t.progress(function(val) {
if($(":checkbox:checked").length == 3) alert(val);
});
$(":checkbox").on('click',function (){
t.notify("blabla");
});