Lance, haven't tested it with a multifield scenario, but altered the js to work with require.js.
(function() { define(["t5/core/events", "t5/core/dom", "t5/core/zone", "./jquery"], function(events, dom, zone, $) { int = function(spec) { var $field = $("#" + spec.id); $field.attr("data-update-zone", spec.zone); return dom.onDocument(spec.event, 'input[data-update-zone]', function() { var containingZone; var params = {}; if (spec.fieldIds) { for (var i = 0; i < spec.fieldIds.length; ++i) { var fieldId = spec.fieldIds[i]; var paramName = "onEvent" + i; var paramValue = $("#" + fieldId).val(); params[paramName] = paramValue; } } containingZone = zone.findZone(this); return containingZone && containingZone.trigger(events.zone.refresh, { url: spec.url, parameters: params }); }); }; return int; }); }).call(this); On Fri, Nov 1, 2013 at 2:00 AM, George Christman <gchrist...@cardaddy.com>wrote: > This looks great Lance, I'll give it a whirl in the am. Thanks. > > > On Thu, Oct 31, 2013 at 5:27 PM, Lance Java <lance.j...@googlemail.com>wrote: > >> Take a look at the onEvent mixin in tapestry-stitch >> http://tapestry-stitch.uklance.cloudbees.net/oneventdemo >> >> >> >> On 31 October 2013 19:44, George Christman <gchrist...@cardaddy.com> >> wrote: >> >> > I was semi able to get it to work using the following code, but it >> looks as >> > if the onDocument method doesn't have a blur event handler? >> > >> > >> > (function() { >> > define(["t5/core/events", "t5/core/dom", "t5/core/zone", >> "./jquery"], >> > function(events, dom, zone, $) { >> > int = function(spec) { >> > var $field = $("#" + spec.id); >> > >> > $field.attr("data-update-zone", spec.zone); >> > $field.attr("data-update-url", spec.url); >> > >> > return dom.onDocument('click', 'input[data-update-zone]', >> > function() { >> > var containingZone; >> > >> > containingZone = zone.findZone(this); >> > return containingZone && >> > containingZone.trigger(events.zone.refresh, { >> > url: this.attribute("data-update-url"), >> > parameters: { >> > "t:fieldvalue": $field.val() >> > } >> > }); >> > }); >> > }; >> > return int; >> > }); >> > >> > }).call(this); >> > >> > >> > On Thu, Oct 31, 2013 at 2:36 PM, George Christman >> > <gchrist...@cardaddy.com>wrote: >> > >> > > I'm trying to create a mixin that on blur will grab the field value >> and >> > > pass it to an event handler followed by a zone refresh. I continue to >> > get a >> > > null pointer on the zone refresh, I'm not sure what I'm missing. >> > > >> > > >> > > tml. >> > > >> > > <t:textfield t:id="employeeName" value="accrualBalance.employeeTemp" >> > > t:mixins="fieldUpdate" t:zone="empIdZone" updateFieldId="empId"/> >> > > >> > > mixins >> > > >> > > @Events( >> > > {EventConstants.VALIDATE, "fieldUpdated" + " when 'zone' >> > parameter >> > > is bound"}) >> > > public class FieldUpdate { >> > > >> > > static final String EVENT_NAME = "fieldupdate"; >> > > @Environmental >> > > private JavaScriptSupport jsSupport; >> > > @InjectContainer >> > > private ClientElement element; >> > > @Parameter(required = true, defaultPrefix = >> BindingConstants.LITERAL) >> > > private String updateFieldId; >> > > @Inject >> > > private ComponentResources resources; >> > > @Parameter(required = true, defaultPrefix = >> BindingConstants.LITERAL) >> > > private String zone; >> > > >> > > public void afterRender() { >> > > Link link = resources.createEventLink(EVENT_NAME); >> > > >> > > JSONObject param = new JSONObject(); >> > > param.put("id", element.getClientId()); >> > > param.put("updateFieldId", updateFieldId); >> > > param.put("url", link.toString()); >> > > param.put("zone", zone); >> > > >> > > jsSupport.require("fieldupdate").with(param); >> > > } >> > > >> > > Object onFieldUpdate(@RequestParameter(value = "t:fieldvalue", >> > > allowBlank = true) final String fieldvalue) throws >> ValidationException { >> > > >> > > CaptureResultCallback<Object> callback = new >> > > CaptureResultCallback<>(); >> > > >> > > this.resources.triggerEvent("fieldUpdated", new >> > > Object[]{fieldvalue}, callback); >> > > >> > > return callback.getResult(); >> > > } >> > > } >> > > >> > > >> > > .js >> > > >> > > (function() { >> > > define(["t5/core/ajax", "./jquery"], function(ajax, $) { >> > > int = function(spec) { >> > > var $field = $("#" + spec.id); >> > > >> > > return $field.bind('blur', function() { >> > > return ajax(spec.url, { >> > > type: "POST", >> > > data: { >> > > "t:fieldvalue": $field.val() >> > > }, >> > > contentType: "application/x-www-form-urlencoded", >> > > success: function(response) { >> > > return process(response); >> > > } >> > > }); >> > > }); >> > > }; >> > > return int; >> > > }); >> > > }).call(this); >> > > >> > > .java >> > > >> > > @InjectComponenet >> > > private Zone empIdZone; >> > > >> > > @Inject >> > > private AjaxResponseRenderer ajaxResponseRenderer; >> > > >> > > void onFieldUpdated(String value) { >> > > test = "test"; >> > > ajaxResponseRenderer.addRender(empIdZone); >> > > } >> > > >> > > >> > > exception >> > > >> > > >> > > org.apache.tapestry5.ioc.internal.OperationException trace >> > > >> > > - Handling Ajax 'fieldupdate' component event request for >> > > timerecords/AccrualBalance:employeename. >> > > >> > > java.lang.NullPointerException >> > > Filter Frames? >> > > Stack trace: >> > > >> > > - >> org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:929) >> > > - org.apache.tapestry5.json.JSONArray.print(JSONArray.java:464) >> > > - >> org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:901) >> > > - org.apache.tapestry5.json.JSONArray.print(JSONArray.java:464) >> > > - >> org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:901) >> > > - org.apache.tapestry5.json.JSONObject.print(JSONObject.java:872) >> > > - >> org.apache.tapestry5.json.JSONObject.printValue(JSONObject.java:895) >> > > - org.apache.tapestry5.json.JSONObject.print(JSONObject.java:872) >> > > - >> > org.apache.tapestry5.json.JSONCollection.print(JSONCollection.java:95) >> > > >> > > - >> > >> org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl.renderPartialPageMarkup(AjaxPartialResponseRendererImpl.java:93) >> > > >> > > - >> > >> org.apache.tapestry5.internal.services.AjaxPartialResponseRendererImpl.renderPartialPageMarkup(AjaxPartialResponseRendererImpl.java:104) >> > > >> > > - >> > >> org.apache.tapestry5.internal.services.AjaxComponentEventRequestHandler.handle(AjaxComponentEventRequestHandler.java:128) >> > > >> > > - >> > >> org.apache.tapestry5.internal.services.ajax.AjaxFormUpdateFilter.handle(AjaxFormUpdateFilter.java:56) >> > > >> > > - >> > >> org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42) >> > > >> > > >> > > >> > > -- >> > > 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 > > -- George Christman www.CarDaddy.com P.O. Box 735 Johnstown, New York