Есть ли способ создать обертку отложенного объекта в jQuery - PullRequest
0 голосов
/ 13 апреля 2011

Я много читал о новом объекте jQuery.Deferred. Одна вещь, которая была бы действительно полезной, - это возможность конвертировать существующий объект в отложенный, тогда вы получите 100% гибкость в отношении того, откуда вы берете свои данные.

Я думаю о чем-то вроде

$.makeDeferred({property: "data"}) // returns an object with .promise() method, in resolved state, and that passes the original object as data/context to any callback function

Кто-нибудь знает, существует ли этот метод или как его создать?

1 Ответ

0 голосов
/ 13 апреля 2011

Вам не нужно оборачивать объект, чтобы получить этот эффект, поскольку большинство методов, которые передаются обещаниям в качестве параметров, будут обрабатывать простой объект как уже разрешенное обещание.

Тем не менее, если вы действительно хотите это, попробуйте это:

(function($) {
    $.makeDeferred = function() {
        var d = $.Deferred();
        d.resolve(arguments);
        return d.promise();
    };
))(jQuery);

Это, по крайней мере, позволит вам также обработать случай, когда вы хотите вызвать метод из обещания, например, my_promise.done(), в отличие от прохождения обещания, т.е. $.when(my_promise).

[не проверено, может не работать, E & OE и т. Д.]

EDIT

На самом деле, я думаю, все, что вам нужно сделать, - это обернуть ваши старые данные в $.when:

$.when({property: "data"})
...