我在Zone
内有一个Form
,Zone
更新了一个包含输入字段的块,我希望将其绑定到父Form
。不幸的是,这似乎并不像我希望的那样容易,因为我收到以下错误消息。
The Description component must be enclosed by a Form component. [at classpath:...Page.tml, line 100]
源.tml
的简化版本如下所示。
<t:form t:id="editForm" t:context="item.id">
<table>
<tr>
<th>Name</th>
<td><t:textField value="item.name"/></td>
</tr>
<t:block t:id="block">
<tr class="person">
<th>Description</th>
<td><t:textField t:id="description" value="item.description"/></td>
</tr>
</t:block>
<t:zone t:id="itemZone" id="itemZone"/>
<t:actionlink t:id="item" zone="itemZone">Click me!</t:actionlink>
</table>
</t:form>
有没有办法进行绑定,如果没有其他替代方案呢?
答案 0 :(得分:4)
此答案已过时,您可以使用常用的区域功能from Tapestry 5.2 on添加表单元素。不过,这种方法仍然有效。
FormInjector
组件允许您将表单元素添加到exising表单中。但是,您必须编写一些自定义JS来触发表单注入。
在你的TML中:
<div t:type="FormInjector" t:id="injector" position="below" />
您可以在JS代码中触发注入:
$('theClientIdOfMyFormInjector').trigger();
您可以通过类名(myForm.down('div.t-forminjector')
)找到表单中的注入器DIV。
组件类:
@Inject
private Block formFieldsBlock;
@OnEvent(component = "injector")
Block loadExtraFormFields() {
return this.formFieldsBlock;
}