0

我正在寻找一种优雅的解决方案来为作为舞台实例的 View 设置 Model 参数。

我的 View 构造函数如下所示:

public function View($model:Model, $controller:IController=null){ ... }

我的子类构造函数:

public function ViewSubClass($model:Model, $controller:IController=null){ ... }

这个想法是,子类将是一个 UI 元素,我宁愿只在舞台上使用它,而不必手动定位它。我已经放弃了删除占位符元素并使用它们的位置来附加真正的 UI 元素的可能性,但这对我来说似乎有点生硬。

我想我总是可以将 View 中 $model 参数的默认值设置为 null,但并非所有视图都是舞台实例,所以我也不完全想这样做。

任何想法表示赞赏。

4

2 回答 2

1

Flash 无法填充构造函数参数。这就是为什么我总是建议避免 View 的构造函数参数。如果这是你自己的班级,我建议继续修复父班级,这样它就不需要这个了。

如果不是,您可以使用

公共函数 VewSubClass() {
   超级(空,空);
}

我会担心你实际上需要模型和控制器,所以我会让 setter 在 View 子类上可用,然后在实例到达 stage 时填充这些变量。

公共函数集模型(值:模型):无效{
    _model = 价值;
    //根据接收到的模型做超级构造函数所做的任何事情
}
公共函数集控制器(值:IController):无效{
   _控制器=值;
   //ETC。
}

请注意,视图可能不需要了解控制器,我也不建议将整个模型提供给视图——只是它需要的几个属性。因此,如果班级您的,那么您将处于更好的位置来纠正这些(IMO)架构问题。

根据您提供的签名,我不会惊讶发现模型和控制器内部存储是私有的,而不是受保护的,这意味着无论如何您都面临着重写(假设模型和视图上需要控制器)。

于 2013-04-24T16:50:26.210 回答
0

我通过将 ViewSubClass 构造函数更改为:

public function ViewSubClass ($model:Model=null, $controller:IController=null){ ... }

不知道为什么我认为构造函数必须完美匹配超类的构造函数。如果有的话,我仍然愿意接受更优雅的解决方案。感谢您的关注。

-Veo

于 2013-04-24T12:20:59.683 回答