0

ミックスインのライフサイクルに精通している誰かが私にアドバイスしてもらえますか:

(タペストリー 5.3.6 を使用)

「afterRender」からいくつかの JavaScript をトリガーする mixin があります。フィールドの clientId を初期化する必要があるため、「afterRender」でこれを行います。

ページが最初にレンダリングされるときにフィールドがレンダリングされる場合はうまく機能しますが、ゾーン更新/xhr 要求の一部としてレンダリングされる場合、スクリプトはクライアントに送信されません。

JavaScriptCallback にブレークポイントを設定しましたが、ajaxResponseRenderer に正常に追加されていますが、呼び出されることはありません。

アドバイスをありがとう!

コード例:

public class MyMixin
{
    ...

    void afterRender()
    {
        addScript("MyMixin.create('%s', '%s');", field.getClientId(), myVariable);
    }

    private void addScript(final String format, final Object... args)
    {
        if (!request.isXHR())
        {
            jsSupport.addScript(InitializationPriority.NORMAL, format, args);
            return;
        }

        ajaxResponseRenderer.addCallback(new JavaScriptCallback()
        {
            @Override
            public void run(JavaScriptSupport javascriptSupport)
            {
                javascriptSupport.addScript(InitializationPriority.NORMAL, format, args);
            }
        });
    }
} 
4

1 に答える 1

0

jsSupportどちらの場合も同じオブジェクトを使用する必要があります: request.isXHR()== {true または false}。

JavaScriptSupport はすでに に登録されています。AjaxResponseRendererを参照してくださいAjaxResponseRendererImpl

したがって、コードは次のようになります

void afterRender() {

    jsSupport.addScript("MyMixin.create('%s', '%s');", field.getClientId(), myVariable);
}
于 2013-04-22T08:07:50.897 に答える