在 require.js 调整大小时执行绘图模块

Execute draw module on resize in require.js

我的项目需要按设定顺序在 Javascript 中重新绘制,我正在尝试实施 Require 以加快速度并组织代码。我想做的只是以下内容:

define([
  'jquery',
  'app/fader', // used to hide the screen on resize
  'app/variables', // this is where my window width and height are gathered for all the other modules
  'app/mobileNavigationMenu', // setup menu on mobile or desktop
  'app/dividerAnimationSetup', // set up animations
  'app/initializeSkrollr', // set up skrollr
  'app/travelExcursions'], function ($, fader, variables, mobileNavigationMenu, dividerAnimationSetup, initializeSkrollr, navigationLinkHighlighting, travelExcursions) {
    return function() {
      var redraw = function() {
        fader.show(function() {
          var previousScrollPosition = $(window).scrollTop(),
              skrollrInstance;

          if(typeof skrollrInstance !== 'undefined') {
            skrollrInstance.destroy();
          }

          // Run all functions requiring window width and height
          mobileNavigationMenu();
          dividerAnimationSetup();
          skrollrInstance = initializeSkrollr();
          navigationLinkHighlighting();
          travelExcursions();
          skrollrInstance.setScrollTop(previousScrollPosition);

          fader.hide();
        });
      }();

      $(window).resize(redraw);        
    };
  });

我在我的主文件中按以下方式调用它:

requirejs(['domReady', 'app/homeBackgroundSlider', 'app/aboutTitleEmphasis', 'app/draw'], function (domReady, homeBackgroundSlider, aboutTitleEmphasis, draw) {
  domReady(function () {
    homeBackgroundSlider();
    aboutTitleEmphasis();

    draw();

    // $(window).resize(function() {  Tried this but it didn't work
      // draw();
    // });
  });
});

也许 require 不能以这种方式工作,但是否有适用于该项目的方法?

所以问题是 RequireJS 会立即加载和执行依赖项,即使使用垫片,它也无法正常工作。我能够修复它的方法是添加 PostalJS and implementing the methodology described in this question。为了解释这个答案,我创建了一个应用程序模块并 returned 了一个 PostalJS 对象。我会在我的绘图和所有其他模块之间传递该对象,然后发布或订阅该应用程序对象。这意味着我的几乎所有模块 return 还没有,但它们仍然需要作为模块的依赖项包含在内,事件将发布到这些模块。我会说这不是一个糟糕的解决方案,因为它允许我控制整个脚本的流程。