2

虽然骨干深度模型支持 AMD 与 RequireJS 一起使用,但它依赖于一个名为underscore.mixin.deepExtend.js的外部文件中的下划线混合,该文件与 AMD 不兼容。

看这个问题:How to mixin Underscore plugins in RequireJS? ,看来我可以在 RequireJS 的shim init 设置中手动将 deepExtend 混合到 Underscore中。

...
shim: {
    ...

    'deep-model': {
        deps: 'underscore',
        init: function() {
            _.mixin(/* hash of deepExtend functions */);
            return _;
        }
    }
}
...

但是,由于 underscore.mixin.deepExtend 不返回 _.mixin() 所需的函数散列,所以我现在不知道该怎么做。

有没有办法在不修改源代码的情况下使用 RequireJS 加载骨干深度模型?

4

2 回答 2

3

这可能不是您正在寻找的答案,但我个人建议的一个选择是完全将 Underscore(以及任何混合组件,可能还有 Backbone 和 jQuery)从 Require 中移除。这种方法的主要优点(除了使您的问题作为副作用消失之外)是您不必通过导入相同的库(或如果您对 Backbone/jQuery 执行相同操作的库)来启动每个 require 模块。

诚然,这稍微“污染”了全局空间,但在我看来,在全局命名空间中有一个_(或$Backbone)变量不会有任何伤害。然而,它会解决您的问题,完全不需要垫片,并为您节省大量导入。当然,您可以(并且应该)仍然将 Require 用于您自己的代码,因为防止变量“污染”全局命名空间将为您省去未来的麻烦。

只是一个想法。

于 2013-02-10T04:49:21.890 回答
0

您可以将主干作为依赖项填充:

shim: {
  // this is an example, I don't know what are the actual dependencies are
  'deep-model': ['backbone', 'underscore']
}

当您将其添加为依赖项时,它们将在主干上运行:

define(['backbone', 'deep-model'], function(Backbone) {
   // backbone now has deepModel in it
});
于 2013-02-10T07:36:07.383 回答