Kann jemand bitte diese gemeinsame Bindung pitfall mir das erklären? (Unter Verwendung des falschen bindable Ereignisname)
-
27-09-2019 - |
Frage
Ich beziehe mich auf diese Seite Link-Text
Die Verwendung der falschen Ereignisnamen in der [Bindable] Tag können Sie Ihre Ursache Anwendung nicht Ihr Eigentum zu binden, und Sie werden nicht einmal wissen, warum. Wann Sie mit den Tasten [Bindable] Tag mit einem individueller name, das folgende Beispiel aussieht wie eine gute Idee:
public static const EVENT_CHANGED_CONST:String = "eventChangedConst";
private var _number:Number = 0;
[Bindable(event=EVENT_CHANGED_CONST)]
public function get number():Number
{
return _number;
}
public function set number(value:Number) : void
{
_number = value;
dispatchEvent(new Event(EVENT_CHANGED_CONST));
}
Der obige Code Abtretungsempfänger eine statische Eigenschaft auf den Ereignisnamen, und dann verwendet die gleiche Zuordnung zum Dispatch das Ereignis. Wenn jedoch der Wert ändert, wird die Bindung nicht angezeigt arbeiten. Der Grund dafür ist, dass die Veranstaltung Name wird EVENT_CHANGED_CONST und nicht der Wert der Variablen.
Der Code geschrieben wurde, sollte als folgt:
public static const EVENT_CHANGED_CONST:String = "eventChangedConst";
private var _number:Number = 0;
[Bindable(event="eventChangedConst")]
public function get number():Number
{
return _number;
}
public function set number(value:Number) : void
{
_number = value;
dispatchEvent(new Event(EVENT_CHANGED_CONST));
}
Ich bin damit einverstanden, tut das falsche Beispiel aussehen wie eine gute Idee, und ich würde es auf diese Weise tun, weil ich denke, es ist der richtige Weg und vermeidet die Möglichkeit eines Schreibfehlers. Warum ist der Name der Konstanten, anstatt sie den Wert verwendet? Sicherlich kann dies nicht wahr?
seinIch schätze Ihre Einsichten
Lösung
Da der Standard-Flex-Compiler ist manchmal nicht so klug ... und ich fühle deinen Schmerz! Ich habe über dieses genaue Problem mehr als ein paar Mal beschwert.
Wenn ich mich richtig erinnere, dann ist es, weil der Compiler mehrere Durchgänge der Fall ist. Einer der frühen Pässe ändert die Metadaten in AS-Code. An diesem Punkt in dem Compiler hat er nicht den Rest des Codes AS analysiert, so dass sie nicht in der Lage Konstanten oder Verweise auf statische Variablen in anderen Dateien Parsen.
Das einzige, was ich vorschlagen kann, ist, melden Sie sich Adobe JIRA, Abstimmung für den Bug, und die Hoffnung, dass die Compiler-Fixes in 4.5 eine gewisse Erleichterung bringen.