0

我正在尝试将 SlickGrid 导入我的应用程序...但即使我使用 AMD 加载模块,它也会将自身附加到窗口

有没有办法使用 Shim 配置来避免污染命名空间。另一个问题可能是 SlickGrid 依赖项将在全局命名空间中寻找它。

想法会很棒。

shim:
  'grid/slick.core':
     deps: ["jquery"]
  'grid/slick.grid':
     deps: ["jquery"]
  'grid/jquery.event.drag-2.0.min':
     deps: ["jquery"]
  'grid/jquery.event.drop-2.0.min':
     deps: ["jquery"]

define [
 "grid/jquery.event.drag-2.0.min"
 "grid/jquery.event.drop-2.0.min"
 "grid/slick.core"
 "grid/slick.grid"
], () ->

有我当前的 Shim 配置以及我正在使用网格的模块

4

1 回答 1

1

原则上,您可以使用init()shim 配置中的回调从全局范围中删除任何对象:

'grid/slick.core': {
  deps: ['jquery'],
  exports: 'Slick',
  init: function (bar) {
    //"this" is the global scope
    var slick = this.Slick;
    delete this.Slick;
    return slick;
  }
}

但是正如您在问题中所述,库本身取决于全局对象上是否存在 Slick 属性,对此您无能为力。

您可以:

  • 联系插件作者并要求他添加 AMD 支持(或者更好的是,在 github 上提交拉取请求)
  • 将插件代码包装在define自己的调用中,然后删除 shim 配置。
于 2012-12-07T11:49:40.273 回答