#tapestry
#tapestry
Вопрос:
Я несколько раз читал, что это рекомендуемый подход к добавлению обратных вызовов на стороне клиента при отправке формы, однако у меня это не работает:
<t:form t:id="myForm" id="myForm">
<t:submit />
</t:form>
<script type="text/javascript">
$("myForm").observe(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT, function() {
alert("submitting");
});
alert("listening");
</script>
Может кто-нибудь указать, что я сделал неправильно?
Я использую tapestry 5.1.0.5
Ответ №1:
В 5.1.0.5 есть интересный дефект (исправлен в более новых версиях)
Простая страница с only не вызывает загрузку какой-либо из основных библиотек javascript tapestry (tapestry.js , prototype.js и т.д.) Таким образом, форма даже не подключается к Submit. Добавление проверки к полю в форме исправило бы это, но если у вас нет поля, это сложно.
Если у вас даже нет tapestry.js загрузка страницы затем первый шаг — убедиться, что вы делаете что-то, что укажет фреймворку, который вам нужен. Один из способов сделать это — вызвать RenderSupport#addScript. Передача пустой строки игнорируется, поэтому вы можете вставить в нее точку с запятой, чтобы, по сути, получить отказ от операции.
@Inject
private RenderSupport renderSupport;
void setupRender() {
// non-blank addScript causes stack to get added
renderSupport.addScript(";");
}
Следующее, что нужно сделать, это вызвать getFormEventManager в вашем элементе формы, чтобы инициализировать форму для tapestry, и убедиться, что обработчики событий подключены.
Я также обновил TML, чтобы дождаться загрузки dom, чтобы вы не получали странных ошибок синхронизации:
<t:form t:id="myForm">
<t:submit/>
</t:form>
<script type="text/javascript">
Tapestry.onDOMLoaded(function() {
$('myForm').getFormEventManager(); // forces the form to start listening for submits
$("myForm").observe(Tapestry.FORM_PREPARE_FOR_SUBMIT_EVENT, function() {
alert("submitting");
});
alert("Dom loaded");
});
</script>
Неприятно, но исправлено в более поздних версиях фреймворка.