Javascript rquirejs-从全局空间获取问题

Javascript rquirejs-从全局空间获取问题,javascript,jquery,backbone.js,marionette,Javascript,Jquery,Backbone.js,Marionette,在我的应用程序中,我为我的应用程序创建了一个全局空间,上面写着socialApp。甚至在调用initialize方法之前,我就在窗口中声明socialApp,如下所示: define([ 'jquery', 'underscore', 'backbone', 'marionette', 'scripts/appRoutes', 'scripts/app/appModel', 'scripts/app/layout/appLayout'],

在我的应用程序中,我为我的应用程序创建了一个全局空间,上面写着
socialApp
。甚至在调用initialize方法之前,我就在窗口中声明
socialApp
,如下所示:

define([
    'jquery',
    'underscore',
    'backbone',
    'marionette',
    'scripts/appRoutes',
    'scripts/app/appModel',
    'scripts/app/layout/appLayout'], 
    function ($,_,Backbone,Marionette,Routes,appModel,appLayout) {
    "use strict";

    socialApp = window.socialApp || {}; // i am declared the socialApp here.
    socialApp = new Backbone.Marionette.Application();

    socialApp.addInitializer(function(options) {
        socialApp.NewRoute = new Routes;
        socialApp.GenModel = new appModel({router:socialApp.NewRoute}); //i am getting error saying "Uncaught ReferenceError: socialApp is not defined" - why?
        socialApp.Layout = new appLayout();
        socialApp.Layout.render();
        Backbone.history.start();
    });
这种情况并不总是发生,但在某些情况下,我会遇到这种错误。如何解决这个问题

appModel
中,我这样声明:

define(['jquery','underscore','backbone','marionette'], 
    function ($,_,Backbone,Marionette) {
    "use strict";
    socialApp = window.socialApp || {}; //exactly i am getting error from here on refresh some times..
    socialApp.Model = Backbone.Model.extend({
        initialize:function(currentRoute){
            this.router = currentRoute.router;
        }
    });
    return socialApp.Model;
});

我在哪里犯的错?有人能理解我吗?

你不能在AMD模块中声明全局变量,socialApp是模块本身中的局部变量。因此,请为socialApp变量声明AMD模块,如下所示:

define([
    'jquery',
    'underscore',
    'backbone',
    'marionette',
    'scripts/appRoutes',
    'scripts/app/appModel',
    'scripts/app/layout/appLayout'], 
    function ($,_,Backbone,Marionette,Routes,appModel,appLayout) {
    "use strict";

    socialApp = window.socialApp || {}; // i am declared the socialApp here.
    socialApp = new Backbone.Marionette.Application();

    socialApp.addInitializer(function(options) {
        socialApp.NewRoute = new Routes;
        socialApp.GenModel = new appModel({router:socialApp.NewRoute}); //i am getting error saying "Uncaught ReferenceError: socialApp is not defined" - why?
        socialApp.Layout = new appLayout();
        socialApp.Layout.render();
        Backbone.history.start();
    });
文件:socialApp.js

define(['marionette'], function(Marionette) {
   var socialApp = {};
   return socialApp;
});
define(['jquery','underscore','backbone','marionette', 'socialApp'], 
    function ($,_,Backbone,Marionette, socialApp) {

    socialApp.Model = Backbone.Model.extend({
        initialize:function(currentRoute){
            this.router = currentRoute.router;
        }
    });
    return socialApp.Model;
});
并要求您使用它的任何地方都提供socialApp

文件:appModel.js

define(['marionette'], function(Marionette) {
   var socialApp = {};
   return socialApp;
});
define(['jquery','underscore','backbone','marionette', 'socialApp'], 
    function ($,_,Backbone,Marionette, socialApp) {

    socialApp.Model = Backbone.Model.extend({
        initialize:function(currentRoute){
            this.router = currentRoute.router;
        }
    });
    return socialApp.Model;
});
或者,如果你坚持全局变量;在窗口内显式声明socialApp


替换
socialApp=window.socialApp | |{}
window.socialApp=window.socialApp | |{}

您收到的错误是什么?我想,需要在模块中声明。它不作为
窗口工作。socialApp
-甚至。