Динамическое изменение контекстной информации FormInjector в Tapestry 5 - PullRequest
2 голосов
/ 04 июня 2010

Моя текущая проблема касается динамического обновления контекстной информации в FormInjector, мой предыдущий вопрос Обновление зоны внутри формы в Tapestry 5 , вероятно, содержит полезную справочную информацию.

Я добавил следующее в свой шаблон.

<div t:type="FormInjector" t:id="injector" t:context="item.id"/>

И следующее в моем классе компонентов.

@OnEvent(component = "injector")
Block loadItemFields(String id) {
    item = itemRepository.find(id);
    return itemFieldsBlock;
}

Все работает нормально, появляются новые поля формы, но поиск всегда выполняется с тем же id. Я хотел бы изменить id с помощью JavaScript перед тем, как вызвать событие, но я не знаю, как этого добиться.

Если требуется дополнительная информация, я с радостью ее предоставлю.

1 Ответ

1 голос
/ 04 июня 2010

Использование параметра контекста для передачи динамического значения не будет моим первым вариантом. (Компонент FormInjector генерирует URL-адрес для запуска обработчика события, который затем включает контекст - однако это делается при визуализации компонента и не должен быть динамическим.)

Я бы избавился от параметра context и нашел бы другой способ передать значение. Одна из возможностей - отправить форму через AJAX и инициировать внедрение в обратном вызове:

this.myFormElement.observe('change', this.onChange.bindAsEventListener(this));

...

onChange: function(event) {
    this.myFormElement.form.request({
           onSuccess: this.afterFormSubmitted.bind(this)
    });
},

afterFormSubmitted: function() {
   this.formInjector.trigger();
}

Таким образом, значение элемента формы было установлено на стороне сервера, когда вы запускаете внедрение формы, и вы можете использовать его в обработчике события внедрения.

...