RequireJS-加载模块的多个实例
RequireJS - Load multiple instances of module
我正试图在RequireJS中编写一个插件,每次调用它时都会创建一个对象的实例。
例如:
define("loader", {
load: function(name, req, onload, config) {
var instance = GlobalGetter.get(name);
instance.id = new Date().getTime() * Math.random();
onload(instance);
}
});
require(["loader!goo"], function(instance) {
console.log(instance.id); // 12345
});
require(["loader!goo"], function(instance) {
console.log(instance.id); // 12345 SAME!
});
在这种情况下,"goo
"只加载一次,因此两个require回调都传递给同一个对象实例。当你考虑到RequireJS试图解决的问题时,这是完全可以理解的,但这不是我所需要的。
是否可以将插件配置为从不返回缓存结果?除了这个用例之外,RequireJS完全符合我的需求。有什么(非)官方的方式来获得我想要的行为吗?
谢谢。
为了说明我的方法,您甚至不需要插件,只需要定义一个类似的构造函数
define( {
'getInstance': function(){
var instance = new Object(); // init the object you need here
instance.id = 42; // some more dynamic id creation here
return instance;
}
} );
然后你的实际通话会是这样的:
require(["loader!goo"], function(constructor) {
var instance = constructor.getInstance();
console.log(instance.id);
});
所以我已经弄清楚了,但我肯定试图错误地使用RequireJS插件。
这个解决方案违背了插件的预期行为,所以你可能不应该这么做
define("loader", {
load: function(name, req, onload, config) {
// Strip out the randomizer
name = name.substring(0, name.indexOf("?"));
// Logic you want repeated each time
var fn = Something.GetClass(name);
var instance = new fn();
instance.id = Math.random();
onload(instance);
},
normalize: function(name, normalize) {
return name + "?" + Math.random();
}
});
require("loader!goo", function(instance) {
console.log(instance.id); // 123
});
require("loader!goo", function(instance) {
console.log(instance.id); // 456
});
相关文章:
- Colorbox插件正在加载其自身的两个实例
- Tinymce-正在将本地文件内容加载到Tinymce实例
- 如何创建模型的实例并加载它
- Javascript 重新加载以加载新实例,而不是重新加载页面
- 多个延迟加载实例 |Javascript
- 导入模板的加载在“this”中没有对象实例 - 它在哪里
- 在页面加载期间实例化匿名类
- 在JS对象实例中引用Ajax加载的元素
- RequireJS-加载模块的多个实例
- Meteor不渲染css,并且在使用外部DDP Meteor实例时不断重新加载应用程序
- 如何在多实例web用户控件上执行javascript页面加载事件
- 如何使用jQuery将TypeKit字体加载到CKEditor实例中
- NodeJS使用socket.io为套接字动态加载服务器实例
- 使用网站的Chrome扩展's加载了jQuery实例
- Jquery.将插件的实例化绑定到动态加载的内容上
- 如何做:AngularJS服务或其他组件在模块加载时实例化
- 加载多个TinyMCE实例会冻结浏览器,解决方案
- 在整个页面中访问jplayer实例以根据用户点击加载数据
- 在Extjs中加载viewport之前,非mvc创建的store不会实例化
- 获取日期实例并在页面加载时显示它