5

我是 Require.js 的新手,我正在尝试做一些我认为很简单但开始变得痛苦的事情。

我正在尝试为我的 Backbone 应用程序定义一个全局命名空间,并将其作为模块加载。这是我的命名空间(main.js):

define(
['jquery',
  'underscore',
  'backbone',
  'GlobalRouter'
],
function($, _, Backbone) {
var App= {
    Models: {},
    Views: {},
    Collections: {},
    Routers: {},
    init: function() {
        new App.Routers.GlobalRouter();
        Backbone.history.start();
    }
}
return App;

});

这是我的 config.js 文件:

require.config({
// your configuration key/values here
baseUrl: "js", // generally the same directory as the script used in a data-main attribute for the top level script
paths: {
    'jquery' : '//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min',
    'underscore': 'vendor/underscore-min',
    'backbone': 'vendor/backbone-min',
    'marionette': 'vendor/backbone.marionette',
    'main' : 'main'
}, // set up custom paths to libraries, or paths to RequireJS plugins
shim: {
    'underscore': {
        exports: '_'
    },

    'backbone': {
        deps: ['underscore', 'jquery'],
        exports: 'Backbone'
    },

    'main' : {
        deps: ['underscore', 'jquery', 'backbone', 'GlobalRouter'],
        exports: 'TEWC'
    }

} // used for setting up all Shims (see below for more detail)
});

define([
'jquery',
   'underscore',
  'backbone',
  'main'
],
function($, _, Backbone, App, GlobalRouter) {
console.log(App)
alert('hit ')
  $(function() {
       App.init();
    });
 }

);

为了更好地衡量,这是我的路由器:

define([
'jquery',
'underscore',
'backbone',
'main'
],
function($, _, Backbone, TEWC) {

TEWC.Routers.GlobalRouter = Backbone.Router.extend({
    routes: {
        "" : "index",
        "documents/:id" : "edit",
        "login" : "login"
    },

    edit: function(id) {
        alert('edit')
    },

    index: function() {
        alert('index')
    },

    login: function() {
        alert('login')
    }
});

});

过去,我收到“应用程序未定义错误”。现在,几分钟后我收到一个加载超时错误,上面写着:

Uncaught Error: Load timeout for modules: main

但是,警报没有触发,并且 main.js 似乎没有被加载,但我相信路由器会,并且它并没有吠叫 TEWC 未定义 - 所以它可能正在加载,即使它不在我的网络标签?

这可能是一个菜鸟问题——有人对此有任何见解吗?

4

2 回答 2

2

以下代码没有定义 GlobalRouter 但它被传递给定义回调

define([
'jquery',
   'underscore',
  'backbone',
  'main'
],
function($, _, Backbone, App, GlobalRouter) {
console.log(App)
alert('hit ')
  $(function() {
       App.init();
    });
 }

添加GlobalRouterdefine

其次,当它加载失败时main..你能从控制台检查它试图访问的 URL 吗?很可能是配置错误。

于 2013-03-25T12:24:22.110 回答
2

如果我没记错的话,你的问题是在config.jsrequire.config() 之后,你的 define() 应该是 require() 。

进一步解释。您目前拥有:

define([
'jquery',
   'underscore',
  'backbone',
  'main'
...

define应该是 arequire因为这是您要执行的代码;它不是一个模块定义。

GlobalRouter这当然还有前面提到的缺失的依赖关系。

于 2013-03-25T20:22:41.040 回答