SlickGrid用AMD污染全局命名空间

时间:2012-12-06 21:48:37

标签: javascript requirejs slickgrid amd

我正在尝试将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配置以及我在

中使用网格的模块

1 个答案:

答案 0 :(得分:1)

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

'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 config。