动态修改 Tapestry 5 中的 FormInjector 上下文信息

发布于 2024-09-04 02:03:17 字数 713 浏览 9 评论 0原文

我当前的问题是在 FormInjector 中动态更新上下文信息,我之前的问题 在 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 完成。我想在触发事件之前用 JavaScript 更改 id ,但我不知道如何实现这一点。

如果需要其他信息,我很乐意提供。

My current problem regards updating context information dynamically in FormInjector, my previous question Updating a zone inside a form in Tapestry 5 probably contains useful background information.

I added the following in my template.

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

And the following in my component class.

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

Everything is working fine, new form fields appear, but the search is always done with the same id. I would like to change the id with JavaScript before triggering the event, but I don't know how to achieve this.

If there is additional information required I am happy to supply it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一笔一画续写前缘 2024-09-11 02:03:17

使用上下文参数传递动态值不是我的第一选择。 (FormInjector 组件生成一个 URL 来触发事件处理程序,然后该事件处理程序包含上下文 - 然而,这是在组件渲染时完成的,并不意味着是动态的。)

我会摆脱上下文参数并找到不同的方式来提交值。一种可能是通过 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();
}

这样,当您触发表单注入时,表单元素的值已在服务器端设置,您可以在注入事件中使用它处理程序。

Using the context parameter to pass a dynamic value wouldn't be my first option. (The FormInjector component generates a URL to trigger the event handler, which then includes the context - however, this is done when the component renders, and is not meant to be dynamic.)

I'd get rid of the context parameter and find a different way to submit the value. One possibility would be to submit the form via AJAX and trigger the injection in the callback:

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();
}

That way, the value of the form element has been set on the server side when you trigger the form injection, and you can use it in your injection event handler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文