1

如何使用 Require.js 的 shim 配置加载 Backbone.io、Backbone 和 socket.io?

似乎其他所有内容都加载得很好,只是当我尝试运行 Backbone.io.connect() 时,我得到“Backbone is not defined”。Backbone.io 的服务方式与 socket.io 来自 socket.io 服务器创建的 /socket.io 目录的方式相同。

requirejs.config({
  baseUrl: 'javascripts/lib',
  paths: {
    jquery: 'jquery.min',
    bootstrap: 'bootstrap.min'
  },
  shim : {
    'underscore': {
      exports: '_'
    },
    'backbone': {
      deps: ["underscore", "jquery"],
      exports: 'Backbone'
    },
    'bootstrap': {
      deps: ["jquery"]
    }
  }
})

requirejs(['jquery',
           'underscore',
           'backbone',
           'bootstrap',
           '../socket.io/socket.io.js',
           '../socket.io/backbone.io.js'
           ], function($, 
                       _,
                       Backbone,
                       bootstrap){

    Backbone.io.connect();
}

小更新:

似乎Backbone在主requirejs函数中定义得很好,只是backbone.io需要在初始化之前定义Backbone。如何初始化 Backbone 对象,然后初始化主干.io 库,以便它可以做到这一点?

4

2 回答 2

3

尝试在你的路径中包含骨干

paths: {
    jquery: 'jquery.min',
    bootstrap: 'bootstrap.min',
    underscore: '<name of underscore file>',
    backbone: '<name of backbone file>'
},

我认为应该这样做。请记住不要在文件名中包含 .js。此外,如果主干.io 依赖于主干,您可能需要在 shim 下添加依赖项。

shim : {
    'underscore': {
      exports: '_'
    },
    'backbone': {
      deps: ["underscore", "jquery"],
      exports: 'Backbone'
    },
    'bootstrap': {
      deps: ["jquery"]
    },
    'backbone.io': {
      deps: ["backbone"]
  }
}
于 2013-02-12T05:07:32.180 回答
2

以下是它最终为我工作的方式:

感谢landland,您的回答最有帮助。

requirejs.config({
  baseUrl: 'javascripts/lib',
  paths: {
    jquery: 'jquery.min',
    bootstrap: 'bootstrap.min',
    backbone: 'backbone',
    underscore: 'underscore',
    socketio: '../../socket.io/socket.io',
    backboneio: '../../socket.io/backbone.io'
  },
  shim : {
    'underscore': {
      exports: '_'
    },
    'backbone': {
      deps: ["underscore", "jquery"],
      exports: 'Backbone'
    },
    'bootstrap': {
      deps: ["jquery"],
      exports: 'bootstrap'
    },
    'backboneio': {
      deps: ["backbone", "socketio"]
    }
  }
})

requirejs(['jquery',
           'underscore',
           'backbone',
           'bootstrap',
           'socketio',
           'backboneio'
           ], function($, 
                       _,
                       Backbone,
                       bootstrap,
                       titlealert,
                       waitForImages){
}
于 2013-02-12T23:27:42.857 回答