RequireJS pass config to module总是返回undefined

时间:2016-05-19 06:38:24

标签: javascript jquery requirejs

我在其他SO帖子中尝试过该解决方案,例如this,但似乎没有用。我总是得到 undefined

我在HTML中的配置。

<script type="text/javascript">
    var require = {
        config: {
            'config': { --> if I change this to app, I could read the value in app.js
                userId: 1
            }
        }
    };
</script>
<script src="lib/require.min.js" data-main="app"></script>

我的配置模块:

define(['module'], function (module)
{
    return {
        userId: module.config().userId,
        userName: "Test"
    }
});

我在我的应用程序中使用配置模块。

require(['modules/config', 'modules/A'], function (config, a)
{
    var userId = config.userId; --> undefined
    var userName = config.userName; --> Test
});

有什么想法吗?我错过了什么?我使用JQuery 1.12.3和RequireJS 2.2.0。

2 个答案:

答案 0 :(得分:0)

解决方案

将传递给RequireJS的配置编辑为:

var require = {
  config: {
    'modules/config': {
      userId: 1
    }
  }
};

解释

您的模块ID不匹配。当您需要模块时,使用require(['modules/config', ...。因此模块名称为modules/config。但是,在RequireJS配置中,您为名为config的模块提供配置。因此,当您在module.config()内使用modules/config时,RequireJS会在配置中搜索名为modules/config的模块,但找不到它。所以你得到了不确定。执行前面提到的修复将允许RequireJS找到配置。

或者,您可以使用paths以名称config加载模块:

var require = {
  paths: {
    config: 'modules/config'
  },
  config: {
    config: {
      userId: 1
    }
  }
};

并使用require(['config', ...

答案 1 :(得分:-1)

我按照以下技术让它工作。 HTML中包含的文件。它们可以在-index.html -modules - myModule.js -app.js 路径中定义。

目录结构:

<script type="text/javascript">
   // require would refer to the require.js global. So i am using requireVar
    var requireVar = {
        config: {

                userId: 1

        }
    };
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.2.0/require.min.js"></script>
<script src="modules/myModule.js"></script>
<script src="app.js"></script>

HTML (index.html)

define("modules/myModule",function ()
{
    return function(){
        return requireVar.config.userId;
    }
});

文件 myModule.js

require(['modules/myModule'], function (myModule)
{
    alert("");
    var userId = myModule(); 
    console.log(userId);
});

最后是 app.js

override func viewDidLoad()
{
    super.viewDidLoad()

    loadingVM = LoadingVM() as LoadingVM

    print("LoadingVC")
    checkStoredUser()
}