熟悉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);
}
});
}
}
答案 0 :(得分:0)
在这两种情况下,您都需要使用相同的jsSupport
对象:request.isXHR()
== {true或false}。
JavaScriptSupport已在AjaxResponseRenderer
中注册,请参阅AjaxResponseRendererImpl
。
所以你的代码看起来像
void afterRender() {
jsSupport.addScript("MyMixin.create('%s', '%s');", field.getClientId(), myVariable);
}