在 Seaside 中获取父组件
Get parent component in Seaside
我想看看在Seaside中是否有可能在不使用session或参数传递的情况下,子组件获取对父组件的引用。也就是说,子组件调用 self 获取父组件。
简短的回答是没有简单的方法可以做到这一点。
原因是 WAComponent
(以及 WAPresenter
)的子类没有对父组件的直接引用,因为出于渲染目的,不需要这样做,因为访问者执行顶部向下路径并依赖于父元素引入了某种耦合,以及可能不使用的实例变量。
为了克服这个问题,我有自己的 WAComponent
子类,我们称之为 EAMComponent
这个组件有一个 parent
实例变量(在我的例子中,还有一个 model
实例变量).
EAMComponent class
实现了 on: modelObject in: parentComponent
(以及依赖于前者的 on:
和 in:
,受 Dolphin's implementation of Model-View-Presenter 的影响)。
那么在父组件上生成的习语是这样的:
createChildrenComponents
dateComponent := EAMTextComponent on: self date in: self.
footerComponent := EAMFooterComponent in: self.
然后在页脚组件中,您可以轻松引用 parent
,它是作为参数传递给选择器 in:
部分的对象。
Iirc,没有引用组件的父组件是一个有意识的设计决定。保持组件解耦和独立很重要。
这并不是说 esteban 的建议是错误的,我们也实现了类似的东西。您可以这样做,但它可能会产生一些后果,例如挥之不去的引用和组件可重用性的障碍。
在 Seaside 中处理此问题的正常方法是使用公告将组件松散地连接到其 parent。 parent 连接它的 children 以发回一个通知。
参见:this example
我想看看在Seaside中是否有可能在不使用session或参数传递的情况下,子组件获取对父组件的引用。也就是说,子组件调用 self 获取父组件。
简短的回答是没有简单的方法可以做到这一点。
原因是 WAComponent
(以及 WAPresenter
)的子类没有对父组件的直接引用,因为出于渲染目的,不需要这样做,因为访问者执行顶部向下路径并依赖于父元素引入了某种耦合,以及可能不使用的实例变量。
为了克服这个问题,我有自己的 WAComponent
子类,我们称之为 EAMComponent
这个组件有一个 parent
实例变量(在我的例子中,还有一个 model
实例变量).
EAMComponent class
实现了 on: modelObject in: parentComponent
(以及依赖于前者的 on:
和 in:
,受 Dolphin's implementation of Model-View-Presenter 的影响)。
那么在父组件上生成的习语是这样的:
createChildrenComponents
dateComponent := EAMTextComponent on: self date in: self.
footerComponent := EAMFooterComponent in: self.
然后在页脚组件中,您可以轻松引用 parent
,它是作为参数传递给选择器 in:
部分的对象。
Iirc,没有引用组件的父组件是一个有意识的设计决定。保持组件解耦和独立很重要。 这并不是说 esteban 的建议是错误的,我们也实现了类似的东西。您可以这样做,但它可能会产生一些后果,例如挥之不去的引用和组件可重用性的障碍。
在 Seaside 中处理此问题的正常方法是使用公告将组件松散地连接到其 parent。 parent 连接它的 children 以发回一个通知。
参见:this example