在Seaside中渲染组件:改进来自WARenderer的流的隐喻>>渲染:到WAComponent>> renderContentOn:

时间:2017-04-05 19:19:30

标签: smalltalk seaside

渲染器发送带有组件的WARenderer >> render:消息时,我需要帮助了解从WAComponent >> renderContentOn:#render:的流程作为 Seaside (Smalltalk Web框架)中的参数。

像这样:aRenderer render: aComponent

我试图捕捉关于组件和渲染器如何在Seaside中一起渲染的直觉。所以,我从推荐的渲染方式开始:

aRenderer render: aComponent

WARenderer >> render:开始,接着执行随后的执行链。

我能够想出一个比喻来帮助我理解这个流程。隐喻是对象之间的对话形式。但是,这个比喻并不完整。在它的中间有一个海湾,我需要帮助填补。

这就是比喻。

myRenderer render: myComponent.

myR :嘿,组件,我相信你最了解如何在任何渲染器上呈现自己。你能把自己渲染给我吗?

myComponent renderOn: myRenderer.

myC :好的!我虽然需要一些上下文来进行渲染。

myComponent renderWithContext: myRenderer context.

myR :那么,你想要上下文?你得到的环境很好!

myComponent renderWithContext: aRenderContext.

此时我需要帮助填补的鸿沟

aRenderContext visitor visit: myComponent.

也许就此而言

aRenderVisitor visit: myComponent.

aRV :Ping!你回家?我能来吗?

myComponent accept: aRenderVisitor.

myC :是的。来吧,已经来了!

aRenderVisitor visitPainter: myComponent.

aRV :好的,快活一下!

然后,在RenderVisitor >> visitPainter:

  • 渲染器重新创建(由myComponent)使用此渲染的上下文(从aRenderVisitor获取),

  • 在myComponent上使用如此创建的渲染器作为参数调用
  • WAComponent >> renderContentOn:,并且

  • 然后刷新渲染器。

这就是比喻。我可以照原样使用它。但是如果有人可以帮助插入孔并将其打成形状,我将不胜感激。

0 个答案:

没有答案