我有许多不同版本的javascript库可以动态加载。
例如,假设我要加载foo库的多个版本。我有:
foo-0.1.js
foo-0.2.js
Foo不是符合AMD标准的库,它没有非冲突模式。这是我无法控制的第三部分图书馆。它只是做了一些事情:
window.Foo = fooFunction;
这些库版本在插件方案中以异步和动态方式加载。加载实际上是由requirejs完成的,但并不重要。我们只是说下载并执行函数的内容。
假设我们有一个需要foo-0.1的MODULE_1插件,以及一个需要foo-0.2的MODULE_2插件。
当用户请求时(例如通过单击其名称),MODULE_1被初始化并加载foo-0.1。它设置用户界面(画布)并等待用户输入。 window.foo对象现在指向版本0.1。
然后,用户请求MODULE_2,它被初始化并开始加载foo-0.2,然后设置其画布并等待用户输入。现在window.foo被覆盖并指向foo-0.2。
最后,用户点击MODULE_1的用户界面,该用户界面对情况作出反应并尝试做某事。但是window.foo指向foo-0.2对象,它与MODULE_1不兼容,并且它崩溃了。
我想要的是将foo-0.1存储在一个对象中,将foo-0.2存储在另一个对象中。 有没有办法在加载foo-0.1和foo-0.2时改变窗口对象?
PS。我认为这不会起作用:
/* MODULE_1 */
// load foo-0.1
// when ready:
var foo-0.1 = window.foo
/* MODULE_1 */
// load foo-0.2
// when ready:
var foo-0.2 = window.foo
因为我不能确定两个中的一个的就绪事件会在另一个的就绪事件之前加载(我是对的吗?)
PPS:我很清楚RequireJs multiversion support,但除非加载的库符合AMD标准,否则它将无效。