我正在开展Backbone
项目,我正在使用 RequireJS 加载jQuery
,Underscore
和Backbone
。
我发现自己在所有模块中一遍又一遍地输入这种模式:
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { ...
有没有一种方法或解决方法可以让这3个库可供所有模块使用,而无需明确要求它们,所以我可以集中精力要求额外的东西?
我虽然在脚本标记中加载这个依赖项堆栈,并使用RequireJS作为我的模块和额外的依赖项,但是我必须通过自己连接jquery,下划线和骨干来丢失JamJS
编译功能。
修改
请参阅Backbone Boilerplate:他们也在使用JamJS,但他们不需要在每个文件上使用主干,下划线和jquery。不知何故,所有人都可以使用它。
他们需要带有RequireJS的标记中的config.js
文件。这会导出require.config内容,然后委托给main.js
。在主要内容中,他们可以神奇地访问 Backbone !
中间发生了什么?
答案 0 :(得分: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 project中使用的沙箱以及facade pattern的实施,它具有以下优势......
它允许您公开可安全的JavaScript库部分 使用而不是暴露整个API。这特别有用 在团队合作时。
此外,将来如果我想从BaseView类而不是直接从Backbone.View扩展所有视图,我只需要更改沙盒中的引用。
答案 1 :(得分:0)
您好,您可以使用SHIM Config
进行全局访问从那里取得的例子:
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'
},