2015-10-28 6 views
0

Я пытаюсь поднять голову RequireJS, чтобы привести в порядок мое приложение.Как вызвать функцию в одном модуле?

У меня есть несколько модулей и скрипт main.js.

В моем main.js я определяю модуль, который содержит несколько функций AJAX, для выполнения основных вызовов API.

Внутри этого модуля «API» я сначала вызываю одну из функций AJAX, которая после завершения требует вызова другой функции AJAX внутри одного и того же модуля «API» (поскольку это задачи Async, я думал, что цепочка им это было бы нормально ?!).

Но просто вызов имени функции в том же модуле не работает.

Как я могу назвать функцию внутри того же модуля?

Вот как мой модуль "API" приводится:

define(function() { 
    return { 
     ajaxCall_A: function() { 
      $.ajax({ 
       // settings 
      }).done(function() { 
       // now call ajaxCall_B 
       ajaxCall_B(); // doesn't work! 
      }); 
     }, 
     ajaxCall_B: function() { 
      $.ajax({ 
       // settings 
      }).done(function() { 
       // finished 
      }); 
     } 
    } 
} 

ответ

2

Следующее изменение добавления ссылки на локальный объект на ajaxCall_A исправит проблему, однако вам, вероятно, будет лучше смотреть на JQuery promises/deferreds, так как это гораздо лучший способ соединения вызовов Ajax.

define(function() { 
    return { 
     ajaxCall_A: function() { 
      var self = this; 
      $.ajax({ 
       // settings 
      }).done(function() { 
       // now call ajaxCall_B 
       self.ajaxCall_B(); // doesn't work! 
      }); 
     }, 
     ajaxCall_B: function() { 
      $.ajax({ 
       // settings 
      }).done(function() { 
       // finished 
      }); 
     } 
    } 
} 

краткий пример использования обещания (непроверенные):

define(function() { 
     return { 
      ajaxCall: function() { 
       $.when(this.ajaxCall_A()) 
       .then(this.ajaxCall_B()) 
       .done(function() { 
        // finished 
       }); 
      }, 
      ajaxCall_A: function() { 
       return $.ajax({ 
        // settings 
       }); 
      }, 
      ajaxCall_B: function() { 
       return $.ajax({ 
        // settings 
       }) 
      } 
     } 
    } 
+0

Отлично, это работает. Вопрос. Насколько сложно объединить jQuery Promises в RequireJS? –

+0

Они уже будут работать, поскольку вы уже используете jQuery. Я добавлю непроверенный пример –

+0

Блестящий, спасибо. Могу быть быстрым ответить, но есть ли у меня модуль, который просто имеет пары имен для глобальных переменных, как мне получить об обновлении переменной? например Если я хочу отслеживать уникальный идентификационный номер во всем приложении? –

-1
(function (define) { 
    return { 
     ajaxCall_A: function() { 
      $.ajax({ 
       // settings 
      }).done(function() { 
       // now call ajaxCall_B 
       define.ajaxCall_B(); // it works now! 
      }); 
     }, 
     ajaxCall_B: function() { 
      $.ajax({ 
       // settings 
      }).done(function() { 
       // finished 
      }); 
     } 
    } 
}); 

Попробуйте использовать, как это.

Смежные вопросы