假设我们有三个小部件: Foo、Bar和Baz。现在,我们有一个长度为10的数组,其中包含“Foo”、“Bar”和“Baz”字。我们希望根据数组中的string-元素实例化相应的Widget:
array.forEach(arrayOfStrings, function(arrayElement) {
require(['some_path/' + arrayElement], function(cls) {
new cls();
});在require循环中使用forEach()是一种不好的实践吗?是否有任何改进此代码的好方法(可能是存储已经使用的元素)?
发布于 2015-10-14 20:07:24
正如Bergi所建议的,require in循环并不一定是一种糟糕的实践,require也会缓存您的AMD模块。
替代办法:
01)您可以使用更声明性的方法,例如使用循环来创建HTML标记并将结果附加到DOM,例如:
<input type="text" name="field1" data-dojo-type="app/foo" />并使用dojo/parser来实现Auto Require模块foo 关于汽车的更多信息,请到这里。
02)使用一个简单的工厂。您可以去掉循环中的require,并在工厂中委托它的使用。一些伪代码:
array.forEach(arrayOfStrings, function(arrayElement) {
UserFactory.createFoo(); // use the factory instead
});
//... factory object here
UserFactory.createFoo = function() {
require(['some_path/foo'], function(cls) {
new cls();
});
};一个更“动态”的版本(只是一些伪代码)
array.forEach(arrayOfStrings, function(type) {
UserFactory.createWidget(type); // use the factory instead
});
//... factory object here
UserFactory.createWidget= function(type) {
require(['some_path/' + type], function(cls) {
new cls();
});
};https://stackoverflow.com/questions/33127551
复制相似问题