Backbone.io,Backbone和require.js

时间:2013-02-12 04:17:47

标签: backbone.js socket.io requirejs

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

似乎其他所有内容都正常加载,只是当我尝试运行Backbone.io.connect()时,我得到“Backbone未定义”。 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在初始化之前定义。我如何初始化Backbone对象,然后是backbone.io库,以便它可以做到这一点?

2 个答案:

答案 0 :(得分:3)

尝试在路径中包含骨干

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

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

shim : {
    'underscore': {
      exports: '_'
    },
    'backbone': {
      deps: ["underscore", "jquery"],
      exports: 'Backbone'
    },
    'bootstrap': {
      deps: ["jquery"]
    },
    'backbone.io': {
      deps: ["backbone"]
  }
}

答案 1 :(得分:2)

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

感谢兰德兰,你的答案帮助最大。

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){
}