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

Reply via email to