Javascript prototype.js: как передать параметр в функцию обратного вызова - PullRequest
2 голосов
/ 31 октября 2010

Не много знаний о Javcascript, кроме как использовать его для динамического HTML. Теперь я немного углублюсь в Ajax и столкнулся с проблемой следующего кода (заимствовано из http://kpumuk.info/php/ajax-enabled-smarty-plugins-part-2-ajax_form/ и отредактировано в соответствии с моими потребностями).

Как передать параметр update_id в функцию obSubmit?

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;
     }

}

Я хочу передать update_id в функцию onSubmit, чтобы я мог назначить ее в качестве цели. Согласно документации Prototype, он получает объект Ajax.Response, который автоматически передается в качестве первого параметра. Итак, вот на что ссылается originalRequest. Я также не вижу способа передать update_id в эту функцию. Как мне это сделать?

На заметку: я вижу этот синтаксис "name: function () {}" в первый раз. Что это такое? Это необходимо, потому что это создает методы объекта? Был бы признателен за указание на простое объяснение.

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

Разве вы не можете просто сделать:

onComplete: callback || this.onSubmit.bind(this, update_id)
2 голосов
/ 31 октября 2010

Вам нужно вызывать функцию самостоятельно из анонимной оболочки (если вы не хотите изменять источник Prototype, которого я настоятельно рекомендую вам избегать), например:

 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); }
   });
 },

Теперь у вашего обработчика будет второй аргумент, параметр update_id, переданный в эту функцию, например, вы можете сделать это:

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