这就是我们以不污染全局命名空间的方式引导数据的方式。相反,它只使用 require.js。它还可以帮助您根据模板中的变量提供初始应用程序配置。
在您呈现的页面中
<script src="require.js"></script>
<script>
define('config', function() {
  return {
    bootstrappedAccounts: <%= @accounts.to_json %>,
    bootstrappedProjects: <%= @projects.to_json(:collaborators => true) %>
  };
});
</script>
<script src="app.js"></script>
globals.js
此文件检查配置并使用返回的任何数据扩展自身
define([
  'config',
  'underscore'
], function(config) {
  var globals = {
  };
  _.extend(globals, config);
  return globals;
});
config.js
如果您希望能够加载应用程序,而不管您是否config在页面中定义,则需要此文件。
define(function() {
  // empty array for cases where `config` is not defined in-page
  return {};
});
app.js
require([
  'globals',
  'underscore',
  'backbone'
], function(globals) {
  if (globals.bootstrappedAccounts) {
    var accounts = new Backbone.Collection(globals.bootstrappedAccounts);
  }
  if (globals.bootstrappedProjects) {
    var projects = new Backbone.Collection(globals.bootstrappedProjects);
  }
});