我找到了解决自己。
谢谢你,IntoTheVoid,为你的答案,但我希望有一个类似AMD的解决方案。这意味着,不再是“污染”全局命名空间。
有2个键我的解决方案:
从阿迪奥斯马尼 “https://github.com/addyosmani/backbone-aura” 和 “https://github.com/amdjs/amdjs-api/wiki/AMD” 的异步模块定义(AMD)API规范。
规范说:“如果工厂是一个函数,它应该只执行一次。”
因此,如果AMD模块多次指定为一个Web应用程序的依赖,依赖不仅没有加载多次,也不执行多次,这是新事物对我来说。它只执行一次,并保持工厂函数的返回值。每个具有相同路径的依赖关系具有相同的对象。这改变了一切。
所以,你只需定义下列AMD模块:
define([], function() {
var app_registry = {};
app_registry.global_event_obj = _.extend({}, Backbone.Events);
app_registry.models = {};
return app_registry;
});
现在,在你要共享资源的模块,你声明这个app_registry模块依赖,并在一个写:
define(['jquery','underscore','backbone','app_registry'],
function ($, _, Backbone, app_registry){
var firstView = Backbone.View.extend({
initialize: function() {
_.bindAll (this, 'methodOne');
this.model.bind ('change', this.methodOne);
this.model.fetch();
},
methodOne: function() {
app_registry.models.abc = this.model;
}
...
,并在其他:
define(['jquery','underscore','backbone','app_registry'],
function ($, _, Backbone, app_registry){
var secondView = Backbone.View.extend({
initialize: function() {
_.bindAll (this, 'methodTwo');
app_registry.global_event_obj.bind ('special', this.methodTwo);
},
methodTwo: function() {
app_registry. ...
}
...
因此,我可以将模型保存到此全局对象并将其存储到视图和子视图中? – chchrist 2012-04-02 15:52:46
伟大的答案,非常感谢分享 – Alex 2013-06-21 10:41:44
所以这是如何解决这个问题?说第一个模型创建models.abc,secondView如何检索模型,而不用担心模块的加载顺序? – eugene 2013-12-30 08:47:07