2014-06-12 30 views
0

所以我有一个小的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条新的传送带的实例,每一个名称通过构造函数传入。我认为我错过了我的理解,帮助表示赞赏。

回答

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); 
    }); 
}); 
+0

出色答卷。谢谢 ;) – dooburt