0

熟悉mixin生命周期的人可以告诉我:

(使用挂毯 5.3.6)

我有一个从'afterRender'触发一些javascript的mixin。我在“afterRender”中执行此操作,因为我需要初始化该字段的 clientId。

如果它附加到的字段在第一次呈现页面时呈现,它会很好用,但是如果它作为区域更新/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 or false}。

JavaScriptSupport 已在 中注册AjaxResponseRenderer,请参阅AjaxResponseRendererImpl

所以你的代码看起来像

void afterRender() {

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