Czy można użyć obiektu EventListener do odsłuchiwania zmiennej i wykrywania, kiedy wartość tej zmiennej ulega zmianie? Dzięki.AS3 - Czy mogę wykryć zmianę wartości zmiennej za pomocą metody addEventListener?
Odpowiedz
Jest to dość łatwe do zrobienia, jeśli opakujesz wszystko w klasę. Będziemy używać metod getter/setter. Metoda ustawiająca będzie wysyłana i wywoływana za każdym razem, gdy zostanie wywołana.
(Uwaga: setery i kolekcje są traktowane jak właściwości). Ty tylko przypisać wartość, w przeciwieństwie do wywołania metody (np someVar = 5
zamiast someVar(5);
Nawet ustawiaczy/getters są funkcje/metody, są one traktowane jak właściwości
//The document class
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
public Class TestDocClass extends Sprite
{
private var _model:Model;
public function TestDocClass():void
{
_model = new Model();
_model.addEventListener(Model.VALUE_CHANGED, onModelChanged);
}
private function onModelChanged(e:Event):void
{
trace('The value changed');
}
}
}
//The model that holds the data (variables, etc) and dispatches events. Save in same folder as DOC Class;
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
public class Model extends EventDispatcher
{
public static const VALUE_CHANGED:String = 'value_changed';
private var _someVar:someVarType;
public function Model():void
{
trace('The model was instantiated.');
}
public function set someVariable(newVal:someVarType):void
{
_someVar = newVal;
this.dispatchEvent(new Event(Model.VALUE_CHANGED));
}
}
}
Zwykle robiłeś coś podobnego w AS2 przy użyciu Object.watch. Nie widzę bezpośredniego odpowiednika, ale wygląda na to, że mx.binding.utils.ChangeWatcher zapewnia podobną funkcjonalność dla wszystkich zmiennych, które można powiązać.
Nie wiem, jak to zrobić w AS3 w przypadku zmiennych niezwiązanych, ale jeśli zmienna, którą chcesz obejrzeć, jest wiążąca (lub jeśli możesz ją zmodyfikować w celu kompilacji), wówczas ChangeWatcher może dać ci chcesz.
@BrianHodge. Jak właściwie używać swojego Przykład: jak wywołać funkcję set? Jak się do niej odnosić? Gdzie przekazać zmienną do zmiany?
Powiedzmy, że jeśli chcę zmienić zmienną owiniętą za pomocą kliknięcia przycisku, na przykład. Muszę wyznać, że próbowałem innych kodów i przykładu (getter/setter) typu, z dispatchEvent
lub bez, i nie mogę się z tym pogodzić! Ale twój przykład wydaje się być dokładnie tym, czego potrzebuję, po prostu nie może sprawić, żeby działało.
Po ustawieniu funkcji jako klasy dokumentu otrzymuję The model was instantiated
. To wszystko.
Dowiedziałem się wreszcie o ludziach takich jak ja, którzy tracą czas na wysyłkę!
W moim przypadku zmienna _someVar
musi być danymi wpisanymi jako String
(to samo dla fornewVal
).
OnceTestDocClass
jest ustawiona jako klasa dokumentu; odwołać się do modelu instancja tak:
_model.someVariable="new stuff";
starałem się zmienić wartość takiego:
_model.someVariable("new stuff");
Można dodać kilka działań śladowych w klasie Model
mieć jasną prezentację w panel wyjście:
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
public class Model extends EventDispatcher
{
public static const VALUE_CHANGED:String = 'value_changed';
private var _someVar:String = "default";
public function Model():void
{
trace('The model was instantiated.');
}
public function set someVariable(newVal:String):void
{
trace ("before " + _someVar);
_someVar = newVal;
trace ("after " + _someVar);
this.dispatchEvent(new Event(Model.VALUE_CHANGED));
}
}
}
To nie jest dużo, ale te rzeczy mogą kosztować trochę ludziom dużo czasu =)
- 1. Java zmienia wartość zmiennej za pomocą metody?
- 2. Czy mogę wykryć błędy przepełnienia liczby całkowitej za pomocą valgrind?
- 3. sprawdzanie wartości zmiennej za pomocą operatora lub
- 4. Inicjowanie wartości za pomocą zmiennej sesji
- 5. Jak wykryć zmianę wyboru CListCtrl?
- 6. Bubbling i przechwytywanie za pomocą addEventListener
- 7. użyciu zmiennej w AS3, Regexp
- 8. Czy istnieje sposób wyeksportować PSD za pomocą AS3
- 9. Przesyłanie obrazu postępów za pomocą URLLoader AS3
- 10. Czy można odtworzyć plik .m4a za pomocą as3?
- 11. przekazywanie zmiennej za pomocą funkcji initialize wewnątrz metody addDomListener
- 12. Android WebView: czy można wykryć zmianę hash adresu URL?
- 13. Powershell - zmiana wartości zmiennej środowiskowej
- 14. Wykryj zmianę tytułu dokumentu za pomocą kodu JavaScript
- 15. Jak wymusić zmianę hasła za pomocą FOSUserBundle?
- 16. Jak uzyskać szczegółowe informacje o zdarzeniach związanych z błędami w Firefoksie za pomocą metody addEventListener?
- 17. jQuery równoważne metody addEventListener Javascript w
- 18. Jak wykryć zmianę rozmiaru elementu iframe?
- 19. Czy można wykryć zmianę daty w polu JCalendar JDateChooser?
- 20. Odrzuć obserwowalną zmianę wartości
- 21. Jak przekazywać wiele wartości zmiennej za pomocą adresu URL
- 22. Czy limit stosu to 5287 w zmiennej AS3 lub predefiniowany?
- 23. Czy można wykryć połączenie LTE za pomocą zestawu SDK iOS?
- 24. JavaScript addEventListener - za pomocą, aby utworzyć efekt mouseover?
- 25. Przechowywanie wielu wartości zmiennej $ _SESSION za pomocą PHP
- 26. Jak wykryć zmianę klasy przez DOMAttrModified
- 27. readystatechange przy użyciu metody addEventListener versus właściwości starego stylu?
- 28. Jak wykryć trybu źródłowego CKEditor na zmianę imprezy
- 29. Rozszerzenie zmiennej bash za pomocą '/'
- 30. Odpowiedź - Czy mogę używać arytmetyki podczas ustawiania wartości zmiennej?
Tak, chciałbym zobaczyć działający przykład tego. Próbuję włączyć test trafienia. Gdy użytkownik znajduje się nad elementem, istnieje detektor ENTER_FRAME rejestrujący stałą wartość "trafienia", ale gdy są wyłączone, słuchacz zmienia się, aby zarejestrować stałą wartość "wyłączenia". Jak ten scenariusz miałby zastosowanie do twojego modelu? – mheavers