2

我正在尝试将 OpenLayers 库与 RequireJS 一起使用。

问题是,OpenLayers 一直处于“未定义”状态,即使它被列为我的模块的唯一依赖项:

define(['OpenLayers'],function (OpenLayers) {
   console.log(OpenLayers);
});

这将打印“未定义”。

如果我用 jquery 替换 OpenLayers(两个 .js 文件都在同一个文件夹中),它将不再是未定义的。

那么为什么 RequireJS 没有加载 OpenLayers 呢?

4

2 回答 2

10

这段代码对我有用:

require.config({
    shim: {
        OpenLayers: {
            exports: 'OpenLayers'
        }
    }
});

require(['OpenLayers'], function(OpenLayers) {
    console.log(OpenLayers);
});
于 2012-10-11T13:56:07.147 回答
6

我对 Backbone.Marionette 也有同样的问题。添加'marionette': { exports: 'Marionette' }shim对象工作。

由于以下原因(来自RequireJS 文档),此shim添加适用于 OpenLayers 和 Marionette :

shim:为旧的、传统的“浏览器全局”脚本配置依赖项和导出,这些脚本不使用 define()来声明依赖项并设置模块值。示例(RequireJS 2.1.0+):

requirejs.config({
    shim: {
        'backbone': {
            //These script dependencies should be loaded before loading
            //backbone.js
            deps: ['underscore', 'jquery'],
            //Once loaded, use the global 'Backbone' as the
            //module value.
            exports: 'Backbone'
        }
于 2013-01-24T17:08:31.177 回答