2 Stimmen

Javascript prototype.js: Übergabe eines Parameters an eine Callback-Funktion

Ich weiß nicht viel über Javcascript, außer dass ich es für dynamisches HTML verwende. Jetzt wage ich mich ein wenig auf Ajax-Boden und habe ein Problem mit dem folgenden Code (entlehnt aus http://kpumuk.info/php/ajax-enabled-smarty-plugins-part-2-ajax_form/ und an meine Bedürfnisse angepasst).

Wie kann ich den Parameter update_id an die Funktion obSubmit übergeben?

var SmartyAjax = {

     submit: function(form, update_id, params, callback)
     {
       var myAjax = new Ajax.Request(
       form.action,
       {
         method: form.method,
         parameters: Form.serialize(form.id),
         onComplete: callback || this.onSubmit
       });
     },

     onSubmit: function(originalRequest)
     {
       var results = originalRequest.responseText;
       this.target = $("target2");
       this.target.innerHTML = results;
     }

}

Ich möchte update_id an die Funktion onSubmit übergeben, damit ich sie als Ziel zuweisen kann. Laut der Prototype-Dokumentation wird das Ajax.Response-Objekt automatisch als erster Parameter übergeben. Das ist also das, was von originalRequest referenziert wird. Ich sehe keine Möglichkeit, update_id auch an diese Funktion zu übergeben. Wie kann ich das tun?

In diesem Zusammenhang: Ich sehe zum ersten Mal diese "name: function(){}"-Syntax. Was bedeutet das? Ist das notwendig, weil es Methoden eines Objekts erzeugt? Ein Zeiger auf ein einfach wäre eine Erklärung willkommen.

Herzlichen Dank!

2voto

Nick Craver Punkte 609016

Sie müssen die Funktion selbst über einen anonymen Wrapper aufrufen (es sei denn, Sie wollen den Prototype-Quelltext ändern, was ich Ihnen dringend empfehlen würde), etwa so:

 submit: function(form, update_id, params, callback)
 {
   var complete = callback || this.onSubmit;
   var myAjax = new Ajax.Request(
   form.action,
   {
     method: form.method,
     parameters: Form.serialize(form.id),
     onComplete: function(req) { complete.call(this, req, update_id); }
   });
 },

Jetzt hat Ihr Handler ein zweites Argument, die update_id Parameter, der an diese Funktion übergeben wird, könnten Sie zum Beispiel so vorgehen:

onSubmit: function(originalRequest, update_id) {
  alert(update_id);
}

2voto

Jochen Punkte 1734

Kannst du das nicht einfach tun:

onComplete: callback || this.onSubmit.bind(this, update_id)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X