Tapestry 5, jQuery UI Dialog и действие close

Использование компонента tapestry5-jquery и Dialog, ¿Как реализовать тесное действие для родительского диалога?. Я имею в виду кнопку, которая выполняет некоторый код, а затем закрывает родительское диалоговое окно без изменения страницы.

Это только версия javascript, что я делаю:

<div id="container">
 ¿Are you sure to delete selected items?
</div>

$('#container').dialog({
 modal : true,
 buttons:[{
 text: "Yes",
 click: function() {
 //Perform action here, then close dialog.
 $(this).dialog("close");
 }
 },{
 text: "No",
 click: function() {
 //Only close dialog
 $(this).dialog("close");
 }
 }
 }]
});

Но мне нужно использовать теги Tapestry 5 и методы класса java:

<t:jquery.dialog t:clientid="delDialog">
 ¿Are you sure to delete selected items?
 
 
</t:jquery.dialog>

Класс Java:

public class UserAdmin { 
 @OnEvent(component = "delYes", value = EventConstants.SELECTED)
 void delYesClicked(){
 //Delete selected items
 }

 @OnEvent(component = "delNo", value = EventConstants.SELECTED)
 void delNoClicked(){
 //Close dialog
 }
}

Благодарю.

2 ответа

Предлагаемый микс:

public class DialogButtonHandler {
 @Parameter(value = "dlgId", defaultPrefix = BindingConstants.LITERAL)
 private String dlgId;

 @Inject
 private JavaScriptSupport javaScriptSupport;

 @InjectContainer
 private ClientElement element;

 @AfterRender
 public void afterRender() {
 javaScriptSupport.addScript(
 "$('#%s').click(function(){$('#%s').dialog('close');});",
 element.getClientId(), dlgId);
 }}

Разметка:

<t:jquery.dialog t:clientid="delDialog">
 ¿Are you sure to delete selected items?
 
 
</t:jquery.dialog>


Вы можете сделать что-то подобное, если clientId всегда одинаково (т.е. delDialog)

@Inject
private AjaxResponseRenderer ajaxResponseRenderer;

protected void addCloseDialogCommand() {

 ajaxResponseRenderer.addCallback(new JavaScriptCallback() {

 @Override
 public void run(JavaScriptSupport javascriptSupport) {

 javascriptSupport.addScript("$('#delDialog').dialog('close');");
 }
 });
}

... и вызовите метод в обработчике событий:

@OnEvent(component = "delNo", value = EventConstants.SELECTED)
void delNoClicked() {
 addCloseDialogCommand();
}

Такое поведение может быть реализовано с использованием mixin, который вы применяете к любому элементу, который вы хотите.

licensed under cc by-sa 3.0 with attribution.