我正在寻找一种优雅的解决方案,为一个舞台实例的View设置Model参数。
My View构造函数如下所示:
public function View($model:Model, $controller:IController=null){ ... }
我的子类构造函数:
public function ViewSubClass($model:Model, $controller:IController=null){ ... }
我的想法是,子类将是一个UI元素,我宁愿只是在舞台上而不必手动定位它。我已经抛弃了将占位符元素移除并使用它们的位置来附加真实UI元素的可能性,但它对我来说似乎有些晦涩。
我想我总是可以将View中$ model参数的默认值设置为null,但并非所有视图都是阶段实例,所以我也不想这样做。
任何想法都表示赞赏。
答案 0 :(得分:1)
Flash无法填充构造函数参数。这就是我always suggest避免View的构造函数参数的原因。如果这是你自己的类,我建议继续修复父类,这样就不需要了。
如果不是,您可以使用
public function VewSubClass() { super(null, null); }
我会担心你实际上需要模型和控制器,所以我会在View子类上创建setter,然后在instance arrives on stage之后填充这些变量。
public function set model(value:Model):void { _model = value; //do whatever the super constructor did based on receiving the model } public function set controller(value:IController):void { _controller = value; //etc. }
请注意,View可能不需要了解控制器,我也不建议将整个模型提供给View - 只需要几个属性它需要。因此,如果Class 是你的,那么你就可以更好地纠正这些(IMO)架构问题。
根据您提供的签名,我不会在所有惊讶地发现模型和控制器内部存储是私有的,而不是受保护的,这意味着你几乎无论如何都要面对重写(假设View上需要模型和控制器)。
答案 1 :(得分:0)
我通过将ViewSubClass构造函数更改为:
来解决了这个问题public function ViewSubClass ($model:Model=null, $controller:IController=null){ ... }
不确定为什么我认为构造函数必须匹配超类'构造函数完美。如果有的话,我仍然愿意接受更优雅的解决方案。谢谢你的期待。
-Veo