1

在 Addy Osmani 的 require.js + Backbone 的 ToDo MVC 示例中:https ://github.com/addyosmani/todomvc/blob/gh-pages/dependency-examples/backbone_require/js/main.js ,他正在使用

Backbone.history.start() // line #31

实际上不需要Backbone。这如何/为什么起作用?垫片是否启用此功能?还是我错过了一些明显的东西?

4

2 回答 2

3

如果您查看代码,view/app.js实际上需要 Backbone。

主干垫片正在导出全局主干变量。

如果没有其他模块实际上需要 shim,则不会加载它,因此将无法访问它。

您可以尝试删除 main.js 中的“视图/应用程序”要求,以亲自查看。

于 2012-08-28T00:20:25.763 回答
0

正如@ChristiMihai 提到的,Backbone 创建了一个全局 Backbone 对象,正确。让我举一个例子,说明我在 Require.js / Backbone / Handlebars 应用程序中所做的事情:

首先,我在 Require config 中包含<head>

var require_config = {
  baseUrl: "/javascripts",
  waitSeconds: 5,
  paths: {
    'cdnjs': 'http://ajax.cdnjs.com/ajax/libs',
    'aspnetcdn': 'http://ajax.aspnetcdn.com/ajax',
    'cloudflare': 'http://cdnjs.cloudflare.com/ajax/libs',
    'local': '/javascripts'
  }
}

if (typeof require !== 'undefined') {
  require.config(require_config);
} else {
  var require = require_config;
}

之后,我启动了一个 require 模块,例如:

define([
  'app'
],
function() {
  console.log('Homepage module');
  /*

  ... this is the meat of your app...
  you can add other dependencies beside `app` too

  */
});

现在app是通过 baseUrl 解析的主要依赖项,/javascripts/app.js并按顺序包含所有必要的 deps,如下所示:

define([
  'order!cdnjs/json2/20110223/json2',
  'order!cloudflare/underscore.js/1.3.1/underscore-min',
  'order!cloudflare/backbone.js/0.9.2/backbone-min',
  'order!handlebars/handlebars-1.0.0.beta.6.min',
  'order!lib/ns',
  'bootstrap'
], function(){});
于 2012-08-28T01:30:29.383 回答