Smalltalk 何时使用海滨组件,何时使用简单渲染对象?
我最近一直在Seaside+Squeak开发一个web应用程序,我发现这是一次非常棒的体验。Seaside确实比其他任何框架都高得多,我感觉自己在更高的抽象层次上工作(比其他框架让您处理的HTTP请求/响应周期和HTML模板更高) 也就是说,我对海边的组件有点困惑。我最近不得不在一个组件上显示一个对象列表(类似于stackoverflow首页)。起初,我将每个对象作为一个组件(WAComponent的子类),但事实证明这是非常浪费的,我必须在父组件中动态设置#children,使其能够工作。然后我尝试让它们渲染对象(不是WAComponent子类的对象,并像组件一样使用renderOn:而不是renderContentOn:进行渲染)。这是可行的,但现在他们无法再像组件那样访问会话对象中的全局状态(使用#session)。然后我发现了“WACurrentSession value”,它允许任何对象访问当前Seaside会话对象。我现在可以让他们渲染对象了。此外,我发现我还可以将许多其他更次要的组件重写为渲染对象Smalltalk 何时使用海滨组件,何时使用简单渲染对象?,smalltalk,squeak,seaside,Smalltalk,Squeak,Seaside,我最近一直在Seaside+Squeak开发一个web应用程序,我发现这是一次非常棒的体验。Seaside确实比其他任何框架都高得多,我感觉自己在更高的抽象层次上工作(比其他框架让您处理的HTTP请求/响应周期和HTML模板更高) 也就是说,我对海边的组件有点困惑。我最近不得不在一个组件上显示一个对象列表(类似于stackoverflow首页)。起初,我将每个对象作为一个组件(WAComponent的子类),但事实证明这是非常浪费的,我必须在父组件中动态设置#children,使其能够工作。然后
除了需要呼叫/应答或回溯状态外,在渲染对象上使用组件还有哪些其他原因?对于新的Seaside用户来说,这是一个常见的困惑点。在Seaside 2.9中,我们已经尽力使它更清晰,它目前在Alpha中,但我将在这里集中讨论2.8,因为它听起来像是您正在使用的 首先,您认为访问会话不需要使用组件是正确的。Seaside 2.9将
#session
升级到一个新类WAObject
,这使得几乎所有Seaside对象(包括组件)都可以访问它,但您现在可以在2.8中明确地参考WACurrentSession
组件在2.8中大致提供以下功能:
#renderContentOn:
通过在#renderClass
中指定的任何渲染器类的实例调用(而不是在要求对象渲染自身时使用的任何渲染器)#updateUrl:
),用于更新渲染器用于生成链接的URL#updateRoot:
,#style
,#script
)允许更新HTML文档的头部分#updateStates:
,#states
)使状态回溯更容易#initialRequest:
),允许基于导致创建会话的请求进行初始化#children
),用于确保下面的所有组件也将调用上述挂钩#通知:
,#隔离:
,等等)#renderOn:
的非组件类来实现,并且可以根据需要由其他组件创建和使用
Seaside 2.9目前通过将WAPresenter
具体化并引入WAPainter
作为其超类来拆分上述功能。上面的1-3在WAPainter
上实现,4-7在WAPresenter
上实现,因此您可以根据需要选择子类。它还从WAPresenter和WAComponent中删除了许多方法,以便于最终用户理解
希望能有所帮助。谢谢您的详细回复!