所以我有一个小的requirejs应用程序需要在运行时创建动态类列表的实例。基本上,反思。我已经做了很多阅读,但我一直在寻找很多关于Typescript的引用,我没有使用它。
主要思想是在requirejs准备好之前,一个数组加载了一个需要的类列表。这个数组在其主入口点之后被赋予requirejs,我希望为每个条目创建一个实例。
我在这里阅读了Ben Nadal的博客http://www.bennadel.com/blog/2320-extending-classes-in-a-modular-javascript-application-architecture-using-requirejs.htm,我喜欢他的模式,并认为这对于我计划动态创建的一些模块非常有效。
我想到我可以这样做: -
_.each(loader, function(dep) {
require([dep.name]);
});
loader
是全局加载数组列表。这不会创建依赖关系的实例,这就是我想要的情况,如下所示: -
new Carousel('Delboy');
new Carousel('Rodney');
new Carousel('Grandad');
在这个例子中,这将创建一个3个新轮播的实例,每个轮播都有一个通过构造函数传入的名称。我想我的理解中遗漏了一些东西,感谢帮助。
答案 0 :(得分:1)
每个已解析的AMD依赖项都是AMD模块,这意味着它是单例对象或函数。在你提到的Ben Nadel的帖子中,“定义”和“实例”之间存在区别。定义是单例,从定义(函数)可以创建多个实例。在Ben的术语中,RequireJS只会为您提供定义,由您来创建实例。
因此,以下内容适用于您尝试执行的操作:
define('Carousel', [], function (name) {
this.name = name;
});
var loader = {};
var carousels = ['Delboy','Rodney','Grandad'];
carousels.forEach(function (carouselName) {
require(['Carousel'], function (Carousel) {
loader[carouselName] = new Carousel(carouselName);
});
});