2015-02-22 7 views
1

У меня проблема, мне нужно подождать, пока requirejs загрузит некоторые «вторичные» зависимости, а затем вернет вычисленный объект в мой модуль requirejs.Возвращает async requirejs значение завершения обратного вызова для внешней функции

Предоставлено, что я знаю, что могу передать все зависимости в первом определении, есть ли альтернативные способы сделать это?

Пример:

define(
 
    ['require', 'jquery', 'underscore'], 
 

 
    function (require, $, _) 
 
    { 
 
     var fooBar = require(['foo', 'bar'], function(foo, bar) 
 
     { 
 
      return new FooBar(foo, bar); 
 
     }); 
 

 
     return fooBar; 
 
    } 
 
);

Этот модуль возвращает меня localRequire обратного вызова, вместо этого я хотел бы получить возвращаемое значение из второго требуется заявление, так что мой объект FooBar.

Как я могу достичь подобной вещи? Спасибо, извините за мой английский, если я сделал ошибки, я итальянский ..

ответ

0

Следующий код, используя требуют как запрос SYNC, но в браузерах можно использовать SYNC запрос, если зависимости определяются в том же файл или был загружен до вызова. В большинстве случаев используется полезный javascript minimizer.

define('foo', ['dep1', 'dep2'], function(){ 
    return foo; 
}); 
define('bar', ['dep1', 'dep2'], function(){ 
    return bar; 
}); 

define(
    ['require', 'jquery', 'underscore'], 

    function (require, $, _) 
    { 
     var foo = require('foo'); 
     var bar = require('bar'); 
     return new FooBar(foo, bar); 
    } 
); 

Другое решение с помощью Promises пообещать вы вернётесь новый объект:

define(
    ['require', 'jquery', 'underscore'], 

    function (require, $, _) 
    { 
     var promise = new Promise(function(fulfill, reject){ 
      require(['foo', 'bar'], function(foo, bar) 
      { 
       fulfill(new FooBar(foo, bar)); 
      }); 
     }); 

     return promise; 
    } 
); 
+0

Спасибо! Я не знал, что могу сразу определить несколько зависимостей, и что предыдущие загруженные зависимости были доступны для повторного использования в более поздних загружаемых модулях! Я новичок в requirejs! – uf4b

0
define(function (require) { 
    var $ = require('jquery'); 
    var _ = require('underscore'); 
    var foo = require('foo'); 
    var bar = require('bar'); 
    return new FooBar(foo, bar); 
}); 
+0

Я уже знал, что общий метод-JS, но по некоторым причинам мне нужно, чтобы избежать этого метода. Спасибо, в любом случае! – uf4b

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