Solved

Problems with function literal used as DWR callback.

Posted on 2007-12-03
4
935 Views
Last Modified: 2008-02-27
I have written a piece of code to be executed on form submit. The code consists of a containing object called EventHandler which handles both initialisation and execution of event handlers.

I use prototype for the eventhandling code. The problem is that the property error of type StringBuffer (another object) does not play well with the function literal myCallback (which is invoked by DWR).

I want to store all validation errors in the error property for access later but neither of the two versions I have attached the code to does the trick for me. I am guessing it has to do with the scope in JavaScript but I can't pinpoint the problem.

Any help greatly appreciated!
//

//Invoked by

//

Event.observe(matchPlayerFormId, 'submit', this.formSubmit.bind(this));
 

//

//Version 1

//

EventHandler.prototype.formSubmit = function(event) {

	this.error = new StringBuffer();
 

	var myCallback = function(data){

		console.log("in callback, result = '" + data + "'");

		if (data.length > 0) {

			this.error.append(data);

			console.log("Intermediate: " + error.toString());

		}

	};
 

	for (var i = 0; i < this.validationNodes.length; i++){

		var variableId = this.validationNodes[i].id;

			

		var variableName = this.validationNodes[i].name;

	

		var variableValue = document.getElementById(variableId).value;

		

		JMatchValidator.validate(variableName, variableValue, myCallback.bind(this));
 

	}

		

	if (this.error.length() > 0){

		console.log("Submit cancelled");

		Event.stop(event);

		

	}

}
 

//

//Version 2

//

EventHandler.prototype.formSubmit = function(event) {

	var error = new StringBuffer();
 

	var myCallback = function(data){

		if (data.length > 0) {

			error.append(data);

		}

	};
 

	alert("Start submit");

	for (var i = 0; i < this.validationNodes.length; i++){

		var variableId = this.validationNodes[i].id;

			

		var variableName = this.validationNodes[i].name;

	

		var variableValue = document.getElementById(variableId).value;
 

		JMatchValidator.validate(variableName, variableValue, myCallback.bind(this));
 

	}

		

	if (error.length() > 0){

		console.log("Submit cancelled");

		Event.stop(event);

		

	}

}

Open in new window

0
Comment
Question by:kveasana
4 Comments
 
LVL 29

Accepted Solution

by:
Badotz earned 500 total points
ID: 20524057
// Try this:
//
var self = this;
JMatchValidator.validate(variableName, variableValue, myCallback.bind(this, self));

// I have noticed that "bind" drops the first object from the argument list
// The first object bwcomes the object that is "called"
0
 
LVL 1

Expert Comment

by:Computer101
ID: 20999905
Forced accept.

Computer101
EE Admin
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

If I have to fix slow responding website my first thoughts are server side optimizations: the database may not be optimized or caching is not enabled, or things like that. We often overlook another major part of our web application: the client. We o…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now