2

我花了几个小时试图弄清楚为什么我的代码不能正常工作,因为它应该基于我试图遵循的几个教程。事情就是这样。许多关于在 Backbone 中使用 Require.js 的教程和文章的代码如下所示:

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});

当我尝试运行此代码时,控制台会显示“Backbone is undefined”。奇怪的是 jQuery 对象被成功实例化为 $. 只是未定义的“_”和“Backbone”。所以我做了一些搜索,发现了 use.js

我被告知 use.js 的诞生是因为 Backbone 的主要贡献者不想更改 Backbone.js 的代码只是为了使其适合 require.js,我理解。所以我尝试使用 use.js 在 require 的配置中指定 Backbone 的依赖项设置,如下所示:

require.config({
  use: {
    'backbone': {
      'deps': ['use!underscore', 'jquery'],
      'attach': 'Backbone'
    },
    'underscore': {
      'attach': '_'
    }
  }
});

在添加此代码并从原始定义中调用 'use!backbone' 而不是要求 'underscore' 和 'backbone' 之后,它终于可以工作了。但我不明白这里发生了什么。如果我必须完成所有这些工作才能使 Backbone 工作,为什么所有那些文章和教程都没有提到这个事实?几乎就像他们的版本没有做这一切就可以正常工作。有什么改变吗?

这也是使用 require.js 处理 Backbone 的唯一方法吗?有没有更简单的方法?(最新的方法)

4

3 回答 3

1

也许这些信息会帮助你...

// This set's up the module paths for underscore and backbone
require.config({ 
    'paths': { 
        "underscore": "libs/underscore-min", 
        "backbone": "libs/backbone-min"
    },
    'shim': 
    {
        backbone: {
            'deps': ['jquery', 'underscore'],
            'exports': 'Backbone'
        },
        underscore: {
            'exports': '_'
        }
    }   
}); 

require([
    'underscore',
    'backbone',
    'app'
    ], 
    function(_, Backbone, app){
        app.init();
});

http://jcreamerlive.com/2012/07/14/using-backbonejs-and-amplifyjs-in-a-requirejs-2-0-application/
https://github.com/jcreamer898/RequireJS-Backbone-Starter

于 2012-10-31T14:16:50.610 回答
0

如果您使用的是 RequireJS 2.0,您可以使用该shim功能来包含非 AMD 模块。

以下文章可能会有所帮助:

https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#wiki-shim

于 2012-10-31T13:12:19.217 回答
0

做这个

define('backbone', [], function(){ return window.Backbone;});

这样你就定义了主干是什么,主干将附加到窗口上。在您最初设置的地方执行此操作。在初始化主干后定义主干。

define(["jquery", "underscore", "backbone"], function($, _, Backbone){
  return function(){
    /* Some instantiation of Backbone stuff */
  };
});

希望有帮助!

干杯! 苏杰

于 2013-03-08T15:35:08.720 回答