Обновление зоны внутри формы в Tapestry 5 - PullRequest
4 голосов
/ 03 июня 2010

У меня 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>

Есть ли способ сделать связывание, и если нет, то какие еще есть альтернативы?

1 Ответ

4 голосов
/ 03 июня 2010

Этот ответ устарел, вы можете добавлять элементы формы, используя обычную функциональность зоны из Tapestry 5.2 на . Этот метод все еще работает, хотя.

Оригинальный ответ, действительный для Гобеленов 5.0 и 5.1:

Компонент FormInjector позволяет добавлять элементы формы в существующую форму. Однако вам придется написать несколько пользовательских JS для запуска внедрения формы.

В вашем TML:

<div t:type="FormInjector" t:id="injector" position="below" />

Вы можете запустить инъекцию в своем коде JS следующим образом:

$('theClientIdOfMyFormInjector').trigger();

Вы можете найти инжектор DIV внутри вашей формы по имени класса (myForm.down('div.t-forminjector')).

Класс компонента:

@Inject
private Block formFieldsBlock;

@OnEvent(component = "injector")
Block loadExtraFormFields() {
    return this.formFieldsBlock;
}
...