链接返回的jQuery延迟对象不起作用

时间:2013-12-11 16:26:01

标签: jquery jquery-deferred

所以我有Form * Handler *。js,它有函数:

FormHelper.prototype.foldUnfoldForm = function($container, state) {
    main.addressDAO.get(debtorCasePath, viewEntityId).done(function(address) {
        return brite.display('case/' + state + 'AddressView', $container, address).done(function() {
            $container.children().unwrap();
        })
    });
};

brite.display会返回一个延迟对象。如果我在console.log这整个代码中,我可以看到它是一个带有所有方法的延迟对象(管道,完成,故障等)。

在Form * Manager *。js中,我只需调用Form * Helper 中的函数*:

FormManager.prototype.foldUnfoldForm = function($container, state) {
    return this.FormHelper.foldUnfoldForm($container, state);
};

我的问题是FormManager.prototype.foldUnfoldForm返回undefined。如果我调试或控制日志到此时,返回的值是未定义的。如果我在FormHelper.prototype.foldUnfoldForm中返回的内容未定义,那么如何定义呢?

编辑:延迟对象在解析之前实际返回,这使得它在调用它的函数中未定义。如何避免这种情况并仅在解析时返回延迟对象?我试图对返回的值执行.done,但它表示Uncaught TypeError:无法调用undefined的方法'done',因为它未定义...

1 个答案:

答案 0 :(得分:0)

您无法从promise对象的完成回调中返回任何内容。相反,你应该使用.then并返回从函数延迟的原始文件,以便你有一个延迟对象。

FormHelper.prototype.foldUnfoldForm = function($container, state) {
    return main.addressDAO.get(debtorCasePath, viewEntityId).then(function(address) {
        return brite.display('case/' + state + 'AddressView', $container, address).done(function() {
            $container.children().unwrap();
        })
    });
};

这假设main.addressDAO.get()正在返回一个jquery promise对象。如果不是,那么我们将需要知道它返回的是什么类型的promise / deferred对象。