5

我有一个Zone内部 a FormZone用一个包含我想绑定到 parent 的输入字段的块进行更新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>

有没有办法进行绑定,如果没有,还有其他选择吗?

4

1 回答 1

4

此答案已过时,您可以使用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;
}
于 2010-06-03T18:03:04.307 回答