我们开始在项目中使用requirejs并将所有内部模块转换为外部模块。
我在动态实现课程时遇到了问题。我们需要能够使用简单的点符号字符串来实现类。
当我们所有模块都是内部模块时,可以通过window对象访问它们。这是一个例子:
// file - TestAction.ts
module cb.action {
export class TestAction {
constructor() {}
}
}
将以下函数与className =" cb.action.TestAction"一起使用我们可以轻松获得TestAction实例。
var instantiateByName = function (className) {
"use strict";
var ClassName2 = className.split('.').reduce(function (current, name) {
return current[name];
}, window);
return new ClassName2();
};
现在我们将所有模块更改为外部模块,TestAction.ts文件现在看起来像这样:
// file - TestAction.ts
export class TestAction {
constructor() {}
}
2个主要问题: - 根据我接收的点符号字符串,我需要导入不同的文件。 (动态需要一个文件) - 我需要上面的instantiateByName函数的等价物,因为我不能再使用window对象了。
期待您的投入
答案 0 :(得分:0)
我会略微更改模块结构(如果你每个文件使用一个类......)
class TestAction {
constructor() {}
}
export = TestAction;
然后使用RequireJS iteself来代替使用方法按名称动态加载模块......
// Instead of 'instantiateByName'...
import TestAction = require('./action/TestAction');
var myAction = new TestAction();
这编译成以下内容......
define(["require", "exports", './action/TestAction'], function(require, exports, TestAction) {
var myAction = new TestAction();
});
这处理了RequireJS异步加载脚本文件的事实。