2011-01-07 5 views
0

Ich habe eine bindbare Getter in einer Komponente, die mich informiert, wenn ein [versteckter] Timer ausgeführt wird. Ich habe auch ein Kontextmenü, das, wenn dieser Timer läuft, sollte einen der Menüpunkte deaktivieren. Ist es möglich, einen ChangeWatcher zu erstellen, der auf die negative Bedingung einer bindbaren Eigenschaft/Getter überwacht und die enabled Eigenschaft des Menüelements ändert?Flex ChangeWatcher binden an eine negative Bedingung

Hier sind die grundlegenden Methoden, die ich zusammen zu binden, ich versuche:

Klasse A:

[Bindable] 
public function get isPlaying():Boolean { 
    return (_timer != null) ? _timer.running : false; 
} 

Klasse B:

private var _playingWatcher:ChangeWatcher; 
public function createContextMenu():void { 
    //...blah blah, creating context menu 
    var newItem:ContextMenuItem = new ContextMenuItem(); 
    _playingWatcher = BindingUtils.bindProperty(newItem, "enabled", _classA, "isPlaying"); 
} 

In dem obigen Code, ich habe die inverse Fall: Wenn isPlaying() wahr ist, ist der Menüeintrag aktiviert; Ich möchte, dass es nur aktiviert wird, wenn die Bedingung falsch ist.

kann ich einen zweiten Getter schaffen (es gibt auch andere Bindungen, die auf dem aktuellen Getter verlassen) den inversen Zustand zurückzukehren, aber das klingt für mich hässlich:

[Bindable] 
public function get isNotPlaying():Boolean { 
    return !isPlaying; 
} 

dies möglich ist, oder gibt es eine anderes Ansatz fehlt mir komplett?

Antwort

1

Konnte Setter auf verbindlichen utils verwenden, aber Ihr Ansatz scheint gültig andernfalls Bind Eigenschaft ist blind für die Typen von Eigenschaften, die es zugeordnet ist, so dass es keine negativen Bedingung Parameter hat.

+0

einstellen können „binden Eigenschaft ist blind“ - ja, ich hatte Angst, dass :) – bedwyr

0

Ich würde ContextMenuItem erweitern und eine benutzerdefinierte Eigenschaft auf es schaffen, dass Sie die aktiviert oder nicht von der zugrunde liegenden ContextMenuItem