2012-05-29 3 views
9

Использование прокладки по требованию2, есть способ сказать, что модуль уже загружен?Requirejs с использованием прокладки

Пример:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="undescrore.js"></script> 
<script type="text/javascript" src="require.js'"></script> 
<script type="text/javascript"> 
    require.config({ 
     paths: { 
      "backbone": '/vendor/js/backbone-min.js' 
     }, 
     shim: { 
      'backbone': { 
       //These script dependencies should be loaded before loading 
       //backbone.js 
       deps: ['underscore', 'jquery'], // here I would like to load the already loaded library 
      } 
     } 
    }); 
</script> 

ответ

23

Ну, если подчеркивание уже загружен и доступен, вы не нуждаетесь в подкладку вообще. Магистраль будет радостно загружаться. Если нет, это, вероятно, потому, что подчеркивание не фактически загружено.

Звучит, однако, неправильно, только частично используя require.js, вы можете также загрузить их все. Для этого вам нужно будет изменить подкладку так:

shim: { 
    backbone: { 
     deps: ["underscore", "jquery"], 
     exports: "Backbone" 
    }, 

    underscore: { 
     exports: "_" 
    } 
} 

и, конечно, обновить paths.

1

Я не уверен, что вам удалось найти лучший подход для вашего случая использования. Если вы действительно - по какой-то причине - вам нужно добавить свои другие скрипты, не используя RequireJS, как в вашем примере кода @ js999, тогда вам нужно будет проверить, существует ли глобальная переменная (jQuery, _) этих сценариев, а затем определить их как модули. Из вашего примера кода это будет выглядеть примерно так:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="undescrore.js"></script> 
<script type="text/javascript" src="require.js'"></script> 
<script type="text/javascript"> 
    // check for jQuery 
    if (window.jQuery) { 
     define('jquery', [], function() { 
      return window.jQuery; 
     }); 
    } 

    // check for underscore 
    if (window._) { 
     define('underscore', [], function() { 
      return window._; 
     }); 
    } 

    require.config({ 
     paths: { 
      // remove the file extension (.js)   
      "backbone": '/vendor/js/backbone-min' 
     }, 
     shim: { 
      'backbone': { 
       deps: ['underscore', 'jquery'] 
      } 
     } 
    }); 
</script> 
Смежные вопросы