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

Reply via email to