Szukam sposobu, aby wykonać daną czynność, a to znaczy, przechodząc odUnikanie .Połączenia() i() używając .apply .bind()
jQuery.when.apply(null, promiseArray).done(...)
do
when(promiseArray).done(...)
Jak być może wiesz, .bind()
może przyzwyczaić się do stworzenia czegoś w stylu domyślnych argumentów, a także zrobić całkiem niezłe rzeczy. Na przykład, zamiast zawsze dzwoni
var toStr = Object.prototype.toString;
// ...
toStr.call([]) // [object Array]
możemy to zrobić jak
var toStr = Function.prototype.call.bind(Object.prototype.toString);
toStr([]) // [object Array]
Jest dość chłodno (nawet jeśli nie jest karalność wydajność powołując .bind()
tak, wiem o tym i jestem świadomy tego), ale naprawdę nie mogę tego zrobić dla połączenia jQuerys .when
. Jeśli masz nieznaną liczbę obietnic, zazwyczaj przesuwasz je do tablicy, aby następnie przekazać je do .when
, tak jak w moim pierwszym fragmencie kodu powyżej.
robię to do tej pory:
var when = Function.prototype.apply.bind($.when);
Teraz możemy iść jak
when(null, promiseArray).done(...)
To działa, ale chcę też, aby pozbyć się konieczności przechodzić w null
wyraźnie każdy czas. Dlatego starałem
var when = Function.prototype.apply.bind($.when.call.bind(null));
jednak, że rzuca się na mnie:
"TypeError: Function.prototype.apply called on incompatible null"
Chyba Siedzę nad tym zbyt długo i nie mogę myśleć już. Wydaje się, że istnieje proste rozwiązanie. Nie chcę używać żadnej dodatkowej funkcji w celu rozwiązania tego problemu, zdecydowanie wolałabym rozwiązanie z użyciem .bind()
.
Zobacz pełny przykład tutaj: http://jsfiddle.net/pp26L/
'.bind ($ .Przy, null)'? – Raynos
@Raynos: yay, pocierać sól do mojego zranionego ego ..: p – jAndy