4

SoundManager2 flash 组件需要一个特定的全局 JavaScript 变量 (soundManager) 才能出现在全局范围内。通过这种方式,Flash 播放器与 SoundManager2 JavaScript API 进行通信。

问题是,当您想使用 AMD (require.js) 构建 Web 应用程序时,您必须做出妥协并让这个全局变量存在。

有什么办法不破坏 AMD 构建包括 SoundManager 在内的应用程序的方式?

4

1 回答 1

6

使用 RequireJS shim 配置将您的非 AMD 库包装为导出全局变量的模块: http ://requirejs.org/docs/api.html#config-shim

requirejs.config({
    paths: {
        'soundmanager2' : 'some/path/soundmanager2'
    },
    shim: {
        'soundmanager2': {
            exports: 'soundManager'
        }
    }
});

然后,像任何其他依赖项一样需要 SoundManager2 shim,并在您自己的模块代码中使用它:

define(['soundmanager2'], function(soundManager) {
    soundManager.setup({ ... });
    soundManager.beginDelayedInit();
    // The following may help Flash see the global.
    window.soundManager = soundManager;
    return soundManager;
});
于 2012-11-06T19:28:26.587 回答