2

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

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

4

1 回答 1

1

使用 context 参数传递动态值不是我的第一选择。(该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();
}

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

于 2010-06-04T13:18:03.893 回答