在 Seaside 中获取父组件

Iya*_*ael 2 smalltalk seaside pharo

我想看看在 Seaside 中是否有可能在不使用会话或参数通道的情况下子组件获取对父组件的引用。也就是说,例如,子组件调用 self 获取父组件。

ema*_*olo 6

简短的回答是没有简单的方法可以做到这一点。

原因是WAComponent(和WAPresenter)的子类没有直接引用父组件,因为出于渲染目的,这不是必需的,因为访问者执行自上而下的路径,并且依赖于父元素引入了某种耦合,和一个可能不会使用的实例变量。

为了克服这一点,我有自己的 WAComponent子类,我们称之为子类,EAMComponent这个组件有一个parent实例变量(在我的例子中,也是一个model实例变量)。

EAMComponent class工具on: modelObject in: parentComponent(以及on:in:依赖于前者,受影响海豚的实现模型-视图-演示的)。

因此,在父组件上,生成的习语类似于:

createChildrenComponents

  dateComponent := EAMTextComponent on: self date in: self.
  footerComponent := EAMFooterComponent in: self.
Run Code Online (Sandbox Code Playgroud)

然后在页脚组件中,您可以轻松引用parent作为参数传递给in:选择器部分的对象。