Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Czy istnieje odpowiednik .apply(), który nie wywołuje funkcji?
croc
post
Post #1





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


Witajcie,

już tłumaczę o co chodzi. Mam trzy "klasy" w java script: Runner, Menu i Option. Idea jest taka, że opcje należą do menu i wybór opcji powoduje wywołanie funkcji zwrotnej. Każdej opcji można przypisać funkcję zwrotną. Jeżeli po wyborze opcji okazuje się, że opcja nie ma przypisanej funkcji zwrotnej, to wywoływana jest funkcja zwrotna menu. No i wszystko byłoby pięknie, gdybym po prostu chciał wywoływać te funkcje, ale muszę je zwrócić. Zależy mi na tym, bo funkcje mają znaleźć się w callbacku jQuerowych funkcji związanych z animacją.

W tej chwili mam coś takiego:

w Runner przykładowo
[JAVASCRIPT] pobierz, plaintext
  1. menu.options[4].callback = function() {
  2. alert("Jestem funkcją tylko dla opcji "+this.label+".");
  3. }
  4. menu.callback = function() {
  5. alert("Ja jestem funkcją dla wszystkich pozostałych opcji, a wywołano mnie z opcji "+this.label+".");
  6. }
[JAVASCRIPT] pobierz, plaintext


W Menu
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function(option) {
  2. if(typeof this.callback === "function") {
  3. this.callback.apply(option); // chciałbym wstrzyknąć option, ale bez wywoływania metody!
  4. return this.callback;
  5. }
  6. }
[JAVASCRIPT] pobierz, plaintext


W Option
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function() {
  2. if(typeof this.callback === "function") {
  3. return this.callback;
  4. }
  5. else {
  6. return this.menu.getCallback(this);
  7. }
  8. }
[JAVASCRIPT] pobierz, plaintext


Czy istnieje rozwiązanie tego problemu? A może option powinna być argumentem .callback dla menu?



------------------------ EDIT ------------------------



Udało mi się rozwiązać problem. Znalazłem metodę bind() i użyłem jej w taki sposób:

W Menu
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function(option) {
  2. if(typeof this.callback === "function") {
  3. return this.callback.bind(option);
  4. }
  5. }
[JAVASCRIPT] pobierz, plaintext


W Option
[JAVASCRIPT] pobierz, plaintext
  1. this.getCallback = function() {
  2. if(typeof this.callback === "function") {
  3. return this.callback.bind(this);
  4. }
  5. else {
  6. return this.menu.getCallback(this);
  7. }
  8. }
[JAVASCRIPT] pobierz, plaintext


Działa pięknie.

Ten post edytował croc 22.04.2012, 01:59:19
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:14