2

私の現在の問題は、 でコンテキスト情報を動的に更新することに関するものFormInjectorで、以前の質問Updating a zone inside a form in Tapestry 5にはおそらく有用な背景情報が含まれています。

テンプレートに以下を追加しました。

<div t:type="FormInjector" t:id="injector" t:context="item.id"/>

そして、私のコンポーネントクラスの以下。

@OnEvent(component = "injector")
Block loadItemFields(String id) {
    item = itemRepository.find(id);
    return itemFieldsBlock;
}

すべてが正常に機能し、新しいフォーム フィールドが表示されますが、検索は常に同じで行われidます。イベントをトリガーする前に with JavaScriptを変更したいのですがid、これを実現する方法がわかりません。

追加情報が必要な場合は、喜んで提供いたします。

4

1 に答える 1

1

コンテキスト パラメーターを使用して動的な値を渡すことは、私の最初の選択肢ではありません。(FormInjectorコンポーネントは、イベント ハンドラーをトリガーする URL を生成します。これにはコンテキストが含まれます。ただし、これはコンポーネントのレンダリング時に行われ、動的であることを意図したものではありません。)

コンテキスト パラメーターを取り除き、値を送信する別の方法を見つけます。1 つの可能性は、AJAX 経由でフォームを送信し、コールバックでインジェクションをトリガーすることです。

this.myFormElement.observe('change', this.onChange.bindAsEventListener(this));

...

onChange: function(event) {
    this.myFormElement.form.request({
           onSuccess: this.afterFormSubmitted.bind(this)
    });
},

afterFormSubmitted: function() {
   this.formInjector.trigger();
}

そうすれば、フォーム インジェクションをトリガーするときにフォーム要素の値がサーバー側で設定され、インジェクション イベント ハンドラーで使用できます。

于 2010-06-04T13:18:03.893 に答える