Requirejs:加载一个模块,其中require('path / to / module')来自变量?

时间:2014-04-24 19:36:11

标签: javascript requirejs require

是否可以这样做:

 define( function( require ){
        var path = 'json!/app/pagelang/login';
        var appLang = require(path),

而不是:

 define( function( require ){
        var appLang = require('json!/app/pagelang/login'),

从我的测试中不可能,因为它导致以下控制台错误:

未捕获错误:模块名称“json!/ app / pagelang / login_unnormalized2”尚未加载上下文:_

2 个答案:

答案 0 :(得分:1)

是的,您只需要稍微改变一下语法:

define( function( require ){
  var path = 'json!/app/pagelang/login';
  require([path], function(appLang){
    // Do stuff with appLang…
  });
});

答案 1 :(得分:1)

答案实际上是“不”,你的第二个片段使用sugar syntax,它使用正则表达式在“幕后”重写代码,如下所示:

define(['json!/app/pagelang/login'], function (appLang) {
  // appLang available
});

当模块名称是变量时,相同的机制不起作用,因为依赖项块需要具体的模块名称,而不是变量。因此,如@idbehold所述,您需要使用内联require的正确异步形式:

define(function (require) {
  var path = 'json!/app/pagelang/login';
  require([path], function (appLang) {
    // appLang available
  });
});