小编典典

在Tapestry 5中更新表单内的区域

ajax

我有一个Zone里面的FormZone用一个包含我想绑定到父母的输入字段的块更新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>

有没有办法进行绑定,如果没有,还有其他替代方法吗?


阅读 242

收藏
2020-07-26

共1个答案

小编典典

这个答案已经过时,您可以使用 Tapestry
5.2上
的常规区域功能添加表单元素。不过,此方法仍然可以正常使用。

原始答案,对于Tapestry 5.0和5.1有效:

FormInjector组件允许您将表单元素添加到现有表单中。不过,您将必须编写一些自定义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;
}
2020-07-26