如何使用require.js向窗口对象添加模块功能?

tel*_*lob 2 javascript requirejs

在我当前的项目中,我正在使用krpano(浏览器的多分辨率全景图像查看器)。您可以在全景图上添加可单击的热点,并定义单击热点时执行的功能。

我要执行的方法在require.js模块内部,但是krpano库仅调用附加到全局窗口对象的方法。

如何将我的方法从模块添加到window对象,以便仍然可以访问所有其他从属模块?

我的应用程序包含大量具有依赖性的模块。

谢谢。

Lou*_*uis 5

您没有提供太多细节,但是想到了两种方法。真正最合适的取决于您的应用程序的具体情况。

  1. 如果不得不从模块中泄漏函数,这是我更愿意做的事情,因为它不会使模块本身泄漏该函数。如果这个模块是完全可重用的,那么我可以在不需要泄漏任何东西的另一个项目中使用它。我会像其他任何AMD模块一样编写我的模块,然后将胶合代码提取出我需要泄漏的内容。模块(在mod.js文件中):

    define(["a", "b"], function (a, b) {
        return { 
            foo: function () {},
            bar: function () {}
        };
    });
    
    Run Code Online (Sandbox Code Playgroud)

    胶水代码:

    require(["mod"], function (mod) {
        window.foo = mod.foo; // Leak the function I need for **this** project.
    });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使模块本身泄漏功能。这使得模块固有地泄漏并损害了重用,但是有时某些模块与特定项目紧密相关,因此为重用而创建的特定项目将不会发生,所以...

    define(["a", "b"], function (a, b) {
        function foo () {}
        window.foo = foo;
        return { 
            foo: foo,
            bar: function () {}
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)