新手问题。谷歌一直没有任何帮助。此外,我遇到的问题有点难以解释。
我的应用程序中有两个组件:JournalView和JournalEntryView。 JournalView显示日记条目列表,其中包含指向各个条目的链接。单击时,每个链接都应创建一个新的JournalEntryView并重定向到这个新创建的JournalEntryView。
目前,我这样做:
html anchor
callback: [
entryView := JournalEntryView new.
entryView entry: anEntry.
self call: entryView ];
with: '(read more)' ]
问题是,此代码希望新创建的组件稍后用值回答。看看晕圈,我可以看到以下组件层次结构:
JournalView
WADelegation
WAAnswerHandler
JournalEntryView
我不想要这个。我希望我的JournalEntryView是一个顶层视图,我只想让我的锚点重定向到一个新的顶级JournalEntryView。
这可能在Seaside吗?
答案 0 :(得分:4)
您可以使用公告。它应该是这样的:
ComponentA>>renderContentOn: html
html anchor
callback: [
self announce: (ViewEntryAnnouncement with: anEntry) ];
with: '(read more)' ].
然后,当您声明ComponentA时。你做这样的事情:
ParentComponent>>initialize
super initialize.
componentA := (ComponentA new
on: ViewEntryAnnouncement do: [ :ann |
| entryView |
entryView := JournalEntryView new.
entryView entry: ann entry.
self call: entryView ];
yourself)
通过这种方式,您宣布您的父母发生了一些事情并且您的父母可以做出反应。
这种方法大部分时间都有效,但您需要为组件添加机器以响应公告(默认情况下没有准备好)。如果可以,更好的方法是在层次结构的顶层创建自己的Component类,谁可以处理公告。 有一些例子(在Pharo中)......
希望这会有所帮助:)
答案 1 :(得分:1)
您可以在会话中调用访问者#rootPresenter:来替换根组件。不是你通常会做的事情,但它是可能的。
self requestContext rootPresenter: aComponent
答案 2 :(得分:1)