Я сам нашел решение.
Спасибо, IntoTheVoid, за ваш ответ, но я надеялся на AMD-подобное решение.Это означает, что снова «загрязняет» глобальное пространство имен.
В моем решении было 2 ключа:
"https://github.com/addyosmani/backbone-aura" от Addy Osmani и" https://github.com/amdjs/amdjs-api/wiki/AMD" спецификация API определения асинхронного модуля (AMD).
Спецификация гласит: «Если фабрика является функцией, она должна выполняться только один раз».
Итак, если модуль amdуказанная несколько раз в качестве зависимости в веб-приложении, эта зависимость не только НЕ ЗАГРУЖАЕТСЯ НЕСКОЛЬКО РАЗ , она также НЕ ВЫПОЛНЕНА НЕСКОЛЬКО РАЗ , и это для меня новость.Он выполняется только один раз, и возвращаемое значение заводской функции сохраняется.Каждая зависимость с одинаковым путем имеет один и тот же объект.И это все меняет.
Итак, вы просто определяете следующий модуль 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. ...
}
...