次のように、いつでもControlPanel
独自のRobot
オブジェクトへの参照を保存させることができます。
// ControlPanel
private var robot:Robot;
public function ControlPanel(robot:Robot) {
this.robot = robot;
}
そして、コントロールパネルを作成するとき:
// Robot
public function Robot() {
controlPanel = new ControlPanel(this);
}
または、均等な種類のシステムを作成してから、コントロールパネルにそれらをディスパッチさせることもできます。独自のControlPanelEvent
クラスを作成してから、ロボット自体に結果を処理させることができます。たとえばfoo
、コントロールパネルで呼び出されるプロパティを変更するとします。次のようにディスパッチできます。
var event:ControlPanelEvent = new ControlPanelEvent(ControlPanelEvent.PROPERTY_CHANGE, "foo", value);
次に、次のように受け取ります。
public function Robot() {
controlPanel = new ControlPanel();
controlPanel.addEventListener(ControlPanelEvent.PROPERTY_CHANGE, updateProperty);
}
public function updateProperty(event:ControlPanelEvent):void {
if (event.key == "foo") {
this.foo = event.value;
}
}
しかし、それは言葉で不必要です。イベントハンドラーでActionScriptの配列アクセス表記を使用することもできます。これは単純なワンライナーになります。
this[event.key] = event.value;
それでも、コントロールパネルでロボットのすべてのプロパティを更新できないようにする必要があるため、これは完全に安全というわけではありません。代わりに、ロボットが持つことができる構成可能なプロパティの単純なマップを維持し、代わりにそれを更新することができます。
private var configuration:Dictionary = new Dictionary();
public function Robot() {
// ...
configuration.foo = "bar";
configuration.baz = "qux";
//...
}
public function updateProperty(event:ControlPanelEvent):void {
if (configuration.hasOwnProperty(event.key))
configuration[event.key] = event.value;
}
どうぞ。もちろん、いつでも構成マップをそれ自体に格納し、そこからプルさせることもできますが、ロボットのプロパティとして絶対に必要な場合は、いくつかの解決策があります。ControlPanel
Robot