Как я могу передать функцию включения в качестве своего собственного рекурсивного обратного вызова в Javascript? - PullRequest
0 голосов
/ 15 февраля 2011

Я разрабатываю библиотеку Javascript поколения AJAXy для набора приложений, в которых поведение обратного вызова зависит от приложения.Функции API, которые я представляю, принимают набор обратных вызовов, которые придают функциональность различным кнопкам и другим событиям, происходящим в стандартной форме:

  • onLoadCallback [Когда форма полностью загружена]
  • onSaveCallback [Когда сохранение успешно обработано]
  • onCancelCallback [При нажатии кнопки отмены]
  • busyCallback [Всякий раз, когда выполняется операция AJAX]
  • readyCallback [Когда AJAXоперация завершается]

Например, одно приложение хочет отобразить эту форму в новом всплывающем окне, а другое - встроить ее в существующую страницу.Во всплывающем сценарии onSaveCallback закроет всплывающее окно и отправит сообщение на страницу запуска.В встроенном сценарии onSaveCallback должен перезагрузить содержимое формы, повторно запустив функцию.

Существует ли стандартный, более простой способ сделать этот рекурсивный обратный вызов, который не записывает функцию дважды, как показано ниже?

MyFormLibrary.displayForm(
  div, 
  formName, 
  query,
  onLoadCallback,
  function onSaveCallback(result) {
      MyFormLibrary.displayForm(
         div,
         formName,
         query,
         onLoadCallback,
         onSaveCallback,
         onCancelCallback,
         busyCallback,
         readyCallback);
  },
  onCancelCallback,
  busyCallback,
  readyCallback);

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Дайте ему имя.В случае выше, вы называете это onSaveCallback внутри.Просто используйте это имя для внешней функции и назовите его onSaveCallback.arguments.callee также должно работать, если есть причина, по которой вы не можете дать ему имя.

MyFormLibrary.displayForm(
  div, 
  formName, 
  query,
  onLoadCallback,
  arguments.callee,
  onCancelCallback,
  busyCallback,
  readyCallback);
0 голосов
/ 15 февраля 2011

Поместите ваш вызов в функцию, чтобы вы могли вызывать ее рекурсивно:

function recursiveSaveCallback (result) {
    MyFormLibrary.displayForm(
        div, 
        formName, 
        query,
        onLoadCallback,
        recursiveSaveCallback,
        onCancelCallback,
        busyCallback,
        readyCallback
    );
}

recursiveSaveCallback(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...