4

初心者の質問です。Google はまったく役に立ちませんでした。その上、私が抱えている問題は、適切に説明するのがちょっと難しいです。

私のアプリケーションには、JournalView と JournalEntryView という 2 つのコンポーネントがあります。JournalView は、個々のエントリへのリンクを含む仕訳エントリのリストを表示します。これらの各リンクをクリックすると、新しい JournalEntryView が作成され、この新しく作成された JournalEntryView にリダイレクトされます。

現在、私はこれを行います:

html anchor
    callback: [
        entryView := JournalEntryView new.
        entryView entry: anEntry.
        self call: entryView ];
    with: '(read more)' ]

問題は、このコードは、新しく作成されたコンポーネントが後で値で応答することを期待していることです。ハローを見ると、次のようなコンポーネントの階層が見えます。

JournalView
    WADelegation
        WAAnswerHandler
            JournalEntryView

私はこれをしたくありません。JournalEntryView をトップレベルのビューにしたいのですが、アンカーを新しいトップレベルの JournalEntryView にリダイレクトしたいだけです。

これはシーサイドで可能ですか?

4

3 に答える 3

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)

このようにして、何かが起こったことを親に知らせ、親が反応できるようにします。

このアプローチはほとんどの場合うまくいきますが、アナウンスに反応するようにコンポーネントに機械を追加する必要があります (デフォルトでは準備ができていません)。可能であれば、アナウンスを処理できる独自のコンポーネント クラスを階層の最上位に作成することをお勧めします。(Pharo で) 周りにいくつかの例があります...

お役に立てれば :)

于 2011-11-02T12:13:48.660 に答える
1

セッションでアクセサー #rootPresenter: を呼び出すことにより、ルート コンポーネントを置き換えることができます。通常行うことではありませんが、可能です。

self requestContext rootPresenter: aComponent
于 2011-11-02T16:57:24.647 に答える
1

うーん、本当に奇妙な質問です。Seaside は Web アプリケーション フレームワークであり、さまざまな静的ページを表示するために提供されていないことを忘れないでください。また、Seaside の主なアイデアは継続の概念、つまり流れや連鎖のようなものです。したがって、Web アプリケーションのエントリ ポイントは 1 つだけです。また、フローを簡単に制御するには、タスクコントローラーを使用することをお勧めします。WATask を参照して、こちらをお読みください

ところで、renderContentOn:から呼び出すのは非常に悪いスタイルです。

于 2011-11-02T18:29:01.473 に答える