【问题标题】:requirejs dynamically calling custom modulesrequirejs 动态调用自定义模块
【发布时间】:2023-03-29 13:23:01
【问题描述】:

我正在尝试根据数据属性动态加载自定义模块。它几乎可以完美运行,但由于某些原因,我的模块被使用不同的路径调用了两次,我不知道为什么。

我的项目结构如下:

+ Assets
    + js
        • main.js
        + libs
        + modules
            • mod.env.js
            • mod.utils.js
            • mod.session.js
        + plugins
        + views
            • signup.js
            • login.js
            • home.js

在我的 main.js 文件中,我有一些基本配置:

require.config({
    baseUrl: '/Assets/js',

    paths: {
        // Libs
        'jquery'    : 'libs/jquery/jquery-2.0.3.min',

        // Module for the project
        'env':           'modules/atmco.env',
        'utils':         'modules/atmco.utils',
        'session':       'modules/atmco.session'
    }
});

我仍然在 main.js 文件中放置了模块条件加载的逻辑:

require(['require', 'jquery','env'],
  function ( require, $, env ) {
      'use strict';

      function init() {
          // Grab the modules/pages on the data attribute of the body
          var modules = $('body').data('modules') || '';
          var pages = $('body').data('page') || '';

          // Initialize the environment stuff for your project
          env.initEnv();

          if ( pages ) {
              require(['./views/' + pages.toLowerCase().split(/\s*,\s*/)[0]]);
          }
      }

      // Initialize the application when the dom is ready
      $(function () {
          init();
      });
  }
);

我的页面具有正确的属性 (<body data-page="Signup" data-module="">) 但由于某些原因 requirejs 尝试调用 2 个不同的文件:

  • 自定义模块按预期调用 "/Assets/js/views/signup.js"

  • 然后它会尝试调用不存在的“/Assets/js/signup.js”

最后,看看我是如何定义我的自定义模块的,包括自定义名称。这似乎很基本:

define('view/signup',
    ['utils'],
    function ( utils ) {
        console.log('my module' + utils.lang );

        return {
        };
    }
);

如果有人能指出我的错误,那将真的有助于我的应用程序并更好地理解 requirejs 的工作原理。非常感谢!

【问题讨论】:

  • 尝试require(['views/' + pages.toLowerCase().split(/\s*,\s*/)[0]]); 而不是require(['./views/' + pages.toLowerCase().split(/\s*,\s*/)[0]]);

标签: javascript requirejs amd


【解决方案1】:

找到解决办法:

命名(或实际上命名)模块实际上是在弄乱模块定义。因此,我只需要将代码调整为:

define(
    ['utils'],
    function ( utils ) {
        console.log('my module' + utils.lang );

        return {
        };
    }
);

这个问题确实帮助我弄清楚了: Requirejs function in define not executed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多