Worked perfectly thanks. I'm also happy I finally got see see an example of the addCallBack usage :) I don't recall ever seeing it on Jumpstart, but might not be a bad example to add.
On Wed, Apr 9, 2014 at 8:53 AM, George Christman <[email protected]>wrote: > Thanks Geoff, your absolutely correct. I think this is a more ideal > solution. > > > On Tue, Apr 8, 2014 at 8:00 PM, Geoff Callender < > [email protected]> wrote: > >> Is it wise to have the client-side close the modal before the server-side >> has handled the submit? What if there's an error? >> >> If you're happy to wait until onSuccess() server-side, then here's how I >> do it... >> >> Move your afterRender() stuff into ModalContainer and add a hide() >> method... >> >> public class ModalContainer implements ClientElement { >> >> // Parameters >> >> @Parameter(name = "componentClientId", value = >> "prop:componentResources.id", defaultPrefix = BindingConstants.LITERAL) >> private String componentClientId; >> >> // Generally useful bits and pieces >> >> @Inject >> private JavaScriptSupport javaScriptSupport; >> >> @Inject >> private AjaxResponseRenderer ajaxResponseRenderer; >> >> // The code >> >> @Override >> public String getClientId() { >> return componentClientId; >> } >> >> void afterRender() { >> >> javaScriptSupport.require("activate-modal").with(componentClientId, new >> JSONObject()); >> } >> >> public void hide() { >> ajaxResponseRenderer.addCallback(makeScriptToHideModal()); >> } >> >> private JavaScriptCallback makeScriptToHideModal() { >> return new JavaScriptCallback() { >> public void run(JavaScriptSupport >> javascriptSupport) { >> >> javascriptSupport.require("hide-modal").with(componentClientId); >> } >> }; >> } >> >> } >> >> ...then change the third line of your tml to this... >> >> <t:modalContainer t:id="dailyCommentModal"> >> >> ...and in the associated java do something like this... >> >> @InjectComponent >> private ModalContainer dailyCommentModal; >> >> void onSuccessFromTheBodyIGaveToModalContainer() { >> >> dailyCommentModal.hide(); >> >> // etc. >> } >> >> Geoff >> >> On 09/04/2014, at 2:04 AM, George Christman wrote: >> >> > Hi guys, I'm using the bootstrap modal component and I have a tapestry >> ajax >> > form nested within it. When I submit the form I'm looking to close out >> the >> > modal dialog box assuming no clientside validation errors ocure long >> with >> > the backdrop. I have it working with the exception of closing out the >> > backdrop. Does anybody know how to achieve this? >> > >> > The code. >> > >> > <div t:type="zone" t:id="dailyCommentZone" id="dailyCommentZone"> >> > <t:if test="hasDailyComments"> >> > <t:modalContainer clientId="dailyCommentModal"> >> > <t:form t:id="formDailyComment" zone="dailyCommentZone"> >> > <div class="modal-content"> >> > <div class="modal-header"> >> > <a class="close" data-dismiss="modal">x</a> >> > <h4 class="modal-title">${dailyCommentTitle} >> > Daily Comment</h4> >> > </div> >> > <div class="modal-body"> >> > <t:textarea t:id="dailyComment" >> > value="dailyCommentText" validate="required"/> >> > </div> >> > <div class="modal-footer"> >> > <button type="button" class="btn btn-default" >> > data-dismiss="modal">Close</button> >> > <t:submit t:id="dailyCommentSubmit" >> value="Add >> > Comment" class="btn btn-success dailyCommentSubmit"/> >> > </div> >> > </div> >> > </t:form> >> > </t:modalContainer > >> > </t:if> >> > </div> >> > >> > >> > ModalContainer.tml >> > >> > <div id="${clientId}" class="modal fade" role="dialog" xmlns:t=" >> > http://tapestry.apache.org/schema/tapestry_5_3.xsd" >> > xmlns:p="tapestry:parameter"> >> > <div class="modal-dialog"> >> > <t:body/> >> > </div> >> > </div> >> > >> > >> > @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL) >> > @Property >> > private String clientId; >> > >> > public void afterRender() { >> > JSONObject json = new JSONObject("id", clientId); >> > javaScriptSupport.require("warning-modal").with(json); >> > } >> > >> > >> > define(["jquery", "bootstrap/modal"], function($) { >> > >> > runDialog = function(spec) { >> > >> > $("#" + spec.id).modal(); >> > >> > }; >> > return runDialog; >> > }); >> > -- >> > George Christman >> > www.CarDaddy.com >> > P.O. Box 735 >> > Johnstown, New York >> >> > > > -- > George Christman > www.CarDaddy.com > P.O. Box 735 > Johnstown, New York > > -- George Christman www.CarDaddy.com P.O. Box 735 Johnstown, New York
