2015-09-28 5 views
0

Я только начал использовать head.js для загрузки JS-файлов асинхронно с зависимостями.Настройка зависимостей с head.js

Глядя на API документацию и примеры, я вижу, что вы можете применить метки для JS-файлов, а затем запустить некоторые условия, когда они загружены, Вот пример в своей документации:

// same as above, but pass files in as an Array 
head.load([ 
    { label1: "file1.js" }, 
    { label2: "file2.js" }], 
    function() { 
    // do something 
}); 

// Labels are usually used in conjuntion with: head.ready() 
head.ready("label1", function() { 
    // do something 
}); 

Так в основном, что будет выполнять что-либо во втором блоке кода (внутри закрытия), когда загружается файл file1.js.

То, что я хотел сделать, это загрузить несколько файлов (асинхронно), когда другие файлы загружаются ..

Например ..

  1. Сначала, загрузите файл Jquery: jquery.min.ks
  2. После успешной загрузки Thats, асинхронно загрузить файлы DataTables: [dataTables.searchHighlight.min.js, dataTables.conditionalPaging.js, jquery.dataTables.yadcf.js]
  3. После этого загрузите основные файлы приложения: [myapp_core .js, myapp_whatever.js]

Heres код, который я сейчас, используя head.js, кажется, работает нормально, но это просто не кажется правильным (Имея бросить head.load() внутри других функций)

// Step #1 
head.load(
    // First, load the main JS library 
    [ 
     { jquery_core: "/include/plugins/jquery-1.11.3/jquery-1.11.3.min.js" }, 
     { jquery_ui: "/include/plugins/jquery-ui-1.10.4/ui/minified/jquery-ui.min.js" } 
    ], 
    function() { 
     console.debug('Loaded jQuery library files, loading jQuery plugin files..'); 
     jquery_plugins(); 
    } 
); 


// Step #2 
function jquery_plugins() { 
    head.load([ 
      // Load all the jQuery plugin files 
      "/include/plugins/bootstrap-3.2.0/js/bootstrap.min.js", 

      "/include/plugins/select2/select2.js", 
      "/include/plugins/bootstrap3-editable/js/bootstrap-editable.min.js", 
      "/include/plugins/bootstrap3-editable/inputs-ext/address/address.js", 
      "/include/plugins/bootstrap3-editable/inputs-ext/typeaheadjs/lib/typeahead.js", 
      "/include/plugins/bootstrap3-editable/inputs-ext/typeaheadjs/typeaheadjs.js", 
      "/include/plugins/bootstrap3-editable/inputs-ext/wysihtml5/wysihtml5.js", 

      "/include/plugins/mustache/mustache.js", 

      "/include/plugins/slimscroll/jquery.slimscroll.min.js", 
      "/include/plugins/jquery-cookie/jquery.cookie.js", 
      "/include/plugins/gritter/js/jquery.gritter.js", 
      "/include/plugins/jquery-tooltipster-master/js/jquery.tooltipster.js", 
      "/include/plugins/bootstrap-wizard/js/bwizard.js", 
      "/include/js/apps.js", 
      "/include/js/enhanced-select.jquery.min.js", 
      "/include/js/jquery.multi-select.js", 
      "/include/plugins/intro/intro.js", 
      "/include/plugins/switchery/switchery.min.js", 
      "/include/js/jquery.multiselect.js", 
      "/include/plugins/parsley/src/parsley.js", 
      "/include/plugins/parsley/src/extra/validator/APPcustom.js", 
      "/include/plugins/parsley/src/extra/plugin/parsley.remote.js", 
      "/include/plugins/bootstrap3-timepicker2/js/bootstrap-timepicker.js", 
      "/include/plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js", 
      "/include/plugins/SamWM/numeric/jquery.numeric.min.js", 
      "/include/plugins/moment/moment.min.js", 
      "/include/plugins/flot/jquery.flot.min.js", 
      "/include/plugins/flot/jquery.flot.time.min.js", 
      "/include/plugins/flot/jquery.flot.resize.min.js", 
      "/include/plugins/flot/jquery.flot.pie.min.js", 
      "/include/plugins/flot/jquery.flot.stack.min.js", 
      "/include/plugins/flot/jquery.flot.crosshair.min.js", 
      "/include/plugins/flot/jquery.flot.categories.js", 
      "/include/plugins/sparkline/jquery.sparkline.js", 
      "/include/plugins/bootstrap-tagsinput/bootstrap-tagsinput.min.js", 
      "/include/plugins/bootstrap-tagsinput/bootstrap-tagsinput-typeahead.js", 
      "/include/plugins/jquery-tag-it/js/tag-it.min.js", 
      "/include/plugins/bootstrap-select/bootstrap-select.min.js", 
      "/include/plugins/contextMenu/src/jquery.ui.position.js", 
      "/include/plugins/contextMenu/src/jquery.contextMenu.js", 
      "/include/js/jquery.mask.min.js", 
      "/include/plugins/jquery-jstree/dist/jstree.min.js", 
      "/include/plugins/jquery.expander.js", 
      "/include/plugins/jquery-labelauty/source/jquery-labelauty.js", 
      "/include/plugins/jquery-file-upload/js/vendor/jquery.ui.widget.js", 

      "/include/plugins/jquery-jscroll/jquery.jscroll.js", 
      "/include/js/modernizr.js", 
      "/include/plugins/jquery-messi/dist/messi.js", 

      "/include/plugins/jquery-tmpl/jquery.tmpl.min.js", 

      { jquery_highlight: "/include/plugins/jquery-searchhighlight/jquery.highlight.js" }, 

      { datatables_core: "/include/plugins/DataTables/minify/datatables.min.js" }, 
      { datatables_searchHighlight: "/include/plugins/DataTables-Plugins/features/searchHighlight/dataTables.searchHighlight.min.js" }, 
      { datatables_conditionalPaging: "/include/plugins/DataTables-Plugins/features/conditionalPaging/dataTables.conditionalPaging.js" }, 
      { datatables_ellipsis: "/include/plugins/DataTables-Plugins/dataRender/ellipsis.js" }, 
      { datatables_yadcf: "/include/plugins/yadcf-0.8.8/jquery.dataTables.yadcf.js" }, 

      { ckeditor: "/include/plugins/ckeditor/ckeditor.js" } 
     ], 
     function() { 
      console.log('All jQuery plugins loaded, loading APP js files...'); 
      APP_js_files(); 
     }); 
} 

// Step #3 
function APP_js_files(){ 
    head.load([ 
      // Load the application JS files 
      { APP_plugins: "/include/js/APP_plugin.js" }, 
      { APP_intro: "/include/js/APP_intro.js" }, 
      { APP_app: "/include/js/APP_app.js" }, 
      { APP_confirmation: "/include/js/APP_confirmation.js" } 
     ], 
     function() { 
      "use strict"; 
      console.log('Successfully loaded all APP js files!'); 

      $.ajaxSetup({ 
       cache:false 
      }); 

      App.init(); 


      template.init(); 
      account.init(); 
      admin.init(); 
      assets.init(); 
      forms.init(); 
     }); 
} 

выше код внутри init.js, который загружается через ..

<script type="text/javascript" src="/include/js/head.min.js" data-headjs-load="/include/js/init.js"></script>

является ли это правильный способ сделать это? Документация на head.js довольно ограничена.

Благодаря

+0

Я думал об использовании RequireJS вместо этого, но id хотел бы использовать это для CSS. Я не понимаю, как HeadJS может включать CSS, но ReqireJS can not, его либо RequireJS не знает чего-то, что знает HeadJS, либо HeadJS установил для чего-то, что у них, вероятно, не должно быть – Justin

ответ

0

Текущая реализация не поддерживает запрос или порядок загрузки, как я могу в SAS исходного кода, поэтому ваше решение этой проблемы является одним из лучших.

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