2

我正在做一个项目Backbone我正在加载RequireJS 。jQueryUnderscoreBackbone

我发现自己在所有模块中一遍又一遍地输入这种模式:

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...

有没有一种方法或解决方法可以让所有模块都可以使用这 3 个库,而无需明确要求它们,这样我就可以专注于需要额外的东西?

我想在脚本标签中加载这个依赖堆栈,并为我的模块和额外的依赖使用 RequireJS,但我JamJS不得不自己连接 jquery、下划线和主干,从而失去了编译功能。

编辑:

请参阅Backbone Boilerplate:他们也在使用 JamJS,但他们不需要每个文件的主干、下划线、jquery。不知何故,它对所有人都可用。

他们需要config.js带有 RequireJS 的标记中的文件。这导出 require.config 的东西,然后委托给main.js. 在 main 中,他们可以神奇地访问Backbone

中间发生了什么?

4

2 回答 2

1

如评论中所述,我有一个沙箱。这是咖啡脚本中的示例:

define [
  "core"
  "jquery"
  "extensions/backbone"
  "underscore"
], (core, $, backbone, underscore) ->

  util: 
    underscore: underscore
  mvc:
    Model: backbone.Model
    Collection: backbone.Collection
    View: backbone.View
    Events: backbone.Events
    Router: backbone.Router

这让我可以做

define ["sandbox"], (sandbox) -> class View extends sandbox.mvc.View

这类似于AuraJS 项目中使用的沙箱和外观模式的实现,它的好处是......

它允许您公开 JavaScript 库中可以安全使用的部分,而不是公开整个 API。这在团队工作时特别有用。

此外,将来如果我想从 BaseView 类而不是直接从 Backbone.View 扩展所有视图,我只需要更改沙箱中的引用。

于 2013-03-23T19:19:47.217 回答
0

您好,您可以使用SHIM 配置进行全局访问

从那里获取的示例:

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-03-23T00:20:27.430 回答