Файлы модулей и субмодулей полностью асинхронной загрузки - PullRequest
0 голосов
/ 25 ноября 2018

Я хотел бы иметь полностью асинхронный метод для загрузки файлов модулей на стороне клиента, без необходимости использования дополнительных инструментов, таких как requireJS.Мой шаблон модуля следует шаблону «Выявление шаблона модуля» .

В моем файле root.js У меня есть

root = (function(thisModule){

  //I'm stuck here, I know I need to add the already 
  //existent properties of thisModule into here 
  //when child.js is loaded first

  function A(){...}
  function B(){...} //public method

  return{
     B:B
  };

})(root || {});

В моем файле child.js У меня есть

root = root || {};
root.child = (function(){

  function C(){...}     
  function D(){...}  //public methods

  return{
     D:D
  };

})();

Как переписать первый модуль в root.js так, чтобы порядок загрузки файлов не имел значения ?То есть следующий код никогда не вызовет исключение.

$.when($.getScript("root.js"), $.getScript("child.js")).done(function(){
   root.B;
   root.child.D;
});

1 Ответ

0 голосов
/ 25 ноября 2018

Самым простым изменением вашего кода будет сохранение содержимого thisModule - просто присвойте свойству B значение thisModule, а затем верните thisModule вместо возврата только { B:B }:

var root = (function(thisModule){
  function A(){ }
  function B(){ } //public method
  thisModule.B = B;
  return thisModule;
})(root || {});

Если root подразумевается как глобальный, то может быть немного понятнее, если вы явно ссылаетесь на window.root, в противном случае вы можете столкнуться с ошибками, если случайно поместите этот фрагмент где-то, кроме верхнего уровня:

window.root = (function(thisModule){ ...

В качестве примечания, если ваш процесс сборки использует Babel (что должно быть в любом серьезном проекте), вы можете рассмотреть возможность использования сокращенных свойств для уменьшения синтаксического шума, например:

return{ D };

вместо

return{ D: D };

, что может быть полезно, если имена методов длинные - меньше синтаксического шума.

...