![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Najgorsza część kampanii wrześniowej za mną, więc można trochę pokodzić dla siebie.
Mianowicie, piszę takiego UserJS dla Blipa do Opery. I cały czas mnie daje się we znaki jeden problem: czy można w jakiś sposób podmienić funkcję zdefiniowaną jako prywatną? Lub chociaż wywołać cokolwiek przed "fabrycznymi"? Mam coś takiego:
I jak wywołać moją funkcję przed tą zdefiniowaną w powyższej zmiennej? Callback jest wywoływany przez Event.observe w Prototype. Jak się nie da, to chociaż w jaki sposób wepchnąć swoje zdarzenie na początek kolejki handlerów dla zdarzeń danego obiektu? unobserve tylko zdejmuje, ale już nie zwraca uchwytu do poprzedniego callbacka ![]() Bez sensu jest zdejmowanie całego zdarzenia i wsadzanie fabrycznego kodu do swojego UserJS-a tylko z tego powodu, że chcę przed nim jedną linijkę wykonać... Any ideas? -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
A przez prototyp?
-------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
A przez prototyp?
luknij na przykładowy kodzik ![]() I cały czas mnie daje się we znaki jeden problem: czy można w jakiś sposób podmienić funkcję zdefiniowaną jako prywatną? można to zrobić tylko za pomocą metod definiowanych w tym samym konstruktorze [zmienna prywatna w obiekcie do której mają zasięg metody - jednak w metodach nie nadpisywać definicji zmiennej] - metody definiowane w prototypie funkcji [a.prototype={metody} lub a.prototype.metoda=fn] nie mają do nich dostępu... w podanym przez Ciebie przykładzie jest to zmienna prywatna ale funkcji a nie obiektu - więc musisz zrobić raczej tak jak radzi @wookieb skoro napisałeś z dużej litery Prototype to raczej miałeś na myśli bibliotekę - akurat jej nie znam więc nie wiem jak to rozwiązali [ale obiekt nasłuchujący powinien mieć publiczne metody - u siebie gdy mam wiele zdarzeń to jest kolejna numeracja i metody mają nazwy generowane typu '_.!*[]-+=_numer-kolejny_typ-zdarzenia' - oczywiście nasłuchuje jedna metoda o nazwie 'nazwa-zdarzenia' przypięta z listenera gdzie jest dostęp do zmiennych listenera - ale prywatnych gdyż this jest potem w innym kontekście - a te inne dziwne metody o tych nazwach tak są przypisywane by móc definiować funkcje w ewent_listenerze z użyciem this]... jeśli nie i korzystasz z jakichś "magicznych" metod opery to rozwiązaniem byłby raczej własny prototyp funkcji eventDispatcher oraz eventDelegate trochu się rozpisałem - ale znając zasadę w jaki sposób przypisywane są zdarzenia na 90% istnieje sposób ingerencji w nie... [EDIT] ---------------------------------------------------------------- I jak wywołać moją funkcję przed tą zdefiniowaną w powyższej zmiennej? Callback jest wywoływany przez Event.observe w Prototype. Jak się nie da, to chociaż w jaki sposób wepchnąć swoje zdarzenie na początek kolejki handlerów dla zdarzeń danego obiektu? unobserve tylko zdejmuje, ale już nie zwraca uchwytu do poprzedniego callbacka ![]() teraz sobie zajrzałem do kodu biblioteki Prototype - po mojemu listę uchwytów zdarzeń możesz pobrać przez: Element.retrieve(element, 'prototype_event_registry').get(eventName); co się pokrywa z tym co znalazłem w google wpisując niekture nazwy z metody observe Update: How to find event listeners on a DOM node in prototype? - więc masz 2 drogi do wyboru... swojego kodu nie sprawdzałem ale funkcja _createResponder także potwierdza to co widzę w kodzie ![]() Ten post edytował zegarek84 17.09.2010, 00:46:18 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:42 |