如何使用require.js向window对象添加模块函数?

时间:2014-08-21 08:52:29

标签: javascript requirejs

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:5)

你没有提供太多细节,但有两种方法可以解决这个问题。什么是最合适的,取决于您的应用程序的具体情况。

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

    define(["a", "b"], function (a, b) {
        return { 
            foo: function () {},
            bar: function () {}
        };
    });
    

    胶水代码:

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

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