您总是可以让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
从中提取,但如果您绝对需要它作为机器人的属性,这里有一些解决方案。