我正在开发一个 Backbone
项目,我正在加载 jQuery
、Underscore
和 Backbone
需要 JS。
我发现自己在所有模块中一遍又一遍地输入这个模式:
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...
有没有一种方法或解决方法可以让所有模块都可以使用这 3 个库,而无需明确要求它们,这样我就可以专注于要求额外的东西?
虽然我想在脚本标签中加载这个依赖项堆栈,并为我的模块和额外的依赖项使用 RequireJS,但我会失去 JamJS
编译功能,因为我必须自己连接 jquery、underscore 和 backbone。
编辑:
参见 Backbone Boilerplate :他们也在使用 JamJS,但他们不需要在每个文件上使用 backbone、underscore、jquery。不知何故,所有人都可以使用它。
他们需要使用 RequireJS 标记中的 config.js
文件。这会导出 require.config 内容,然后委托(delegate)给 main.js
。在 main 中,他们可以神奇地访问 Backbone!
中间发生了什么?
最佳答案
我有一个评论中提到的沙箱。这是 CoffeeScript 中的示例:
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 project 中使用的沙箱和 facade pattern 的实现这样做的好处是……
It lets you expose the parts of a JavaScript library that are safe to use instead of exposing the entire API. This is particularly useful when working in teams.
另外,将来如果我想从 BaseView 类而不是直接从 Backbone.View 扩展所有 View ,我只需要更改沙箱中的引用即可。
关于javascript - 在 RequireJS 中始终需要某些依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15563348/