在forrender中添加的Mixin脚本未针对xhr请求触发

时间:2013-04-22 01:21:19

标签: tapestry

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

(使用tapestry 5.3.6)

我有一个mixin从'afterRender'触发一些javascript。我在'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);
            }
        });
    }
} 

1 个答案:

答案 0 :(得分:0)

在这两种情况下,您都需要使用相同的jsSupport对象:request.isXHR() == {true或false}。

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

所以你的代码看起来像

void afterRender() {

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