我有一个Zone里面的Form,Zone用一个包含我想绑定到父母的输入字段的块更新Form。不幸的是,这似乎并没有像我希望的那样容易,因为我收到以下错误消息。
Zone
Form
The Description component must be enclosed by a Form component. [at classpath:...Page.tml, line 100]
.tml下面是源代码的简化版本。
.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>
有没有办法进行绑定,如果没有,还有其他替代方法吗?
这个答案已经过时,您可以使用 Tapestry 5.2上的常规区域功能添加表单元素。不过,此方法仍然可以正常使用。
该FormInjector组件允许您将表单元素添加到现有表单中。不过,您将必须编写一些自定义JS来触发表单注入。
FormInjector
在您的TML中:
<div t:type="FormInjector" t:id="injector" position="below" />
您可以像这样在JS代码中触发注入:
$('theClientIdOfMyFormInjector').trigger();
您可以在表单内通过其类名(myForm.down('div.t-forminjector'))找到注射器DIV 。
myForm.down('div.t-forminjector')
组件类:
@Inject private Block formFieldsBlock; @OnEvent(component = "injector") Block loadExtraFormFields() { return this.formFieldsBlock; }