如何解决和拒绝jquery对象

时间:2014-06-18 15:47:54

标签: jquery jquery-deferred

是否可以解析jquery延迟对象然后拒绝它,然后再次解析它等等。 并在每次解决时触发$。

我正在尝试这个,但它不起作用:

var bindHide = $.Deferred();
var bindShow = $.Deferred();
    if ($('#userdata').is(':hidden')) {
        bindShow.resolve();
    } else {
        bindHide.resolve();
    }
    //SHOW USERDATA
    $.when(bindShow).then(function() {
        bindShow.reject();
        $('#miniWeightLevel, #miniWeightLevelTextLayer').unbind('vclick').bind('vclick', function (e) {
            showUserdata();
            $('#miniWeightLevel, #miniWeightLevelTextLayer').unbind('vclick');
            bindHide.resolve();
        });
    });     
    //HIDE USERDATA
    $.when(bindHide).then(function() {
        bindHide.reject();
        $('#minifyCross').unbind('vclick').bind('vclick', function (e) {
            hideUserdata();
            bindShow.resolve();
        });
    });

2 个答案:

答案 0 :(得分:0)

给定的延期只能被拒绝或解决一次。而且,由于$.when()也会返回一个承诺,因此它也只会被拒绝或解决。所以,不,它不能像你要求的那样工作。

标准延期和承诺并非设计为通用通知系统,而是您尝试使用它们的方式。 jQuery的实现有一个可以用于此的通知功能,但标准工作是将该功能从承诺中移除,并且将以不同的方式完成。

听起来我更像是你需要一个通知系统或自定义事件,而不是单向设计的承诺。它们被解决或拒绝一次,然后再也不会改变。

答案 1 :(得分:0)

我找到了使用.progress().notify()方法的解决方案。每次拨打notify()时,都会触发.progress()

var logged=$.Deferred();

logged.notify();

logged.progress(function(){
//do what you need
});