2013-02-12 57 views
1

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

似乎所有的東西都加載得很好,只是當我試圖運行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(); 
} 

小更新:

好像骨幹被定義在主requirejs功能就好了,它只是需要backbone.io它的初始化之前定義骨幹。我怎樣才能初始化Backbone對象,然後初始化backbone.io庫,以便它可以做到這一點?

回答

3

嘗試,包括在你的路徑

​​

骨幹,我認爲應該這樣做。切記不要在文件名中包含.js。 另外,如果backbone.io依賴於主幹,則可能需要在shim下添加依賴關係。

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

另外,'下劃線:'underscore.min''我想... – 2013-02-12 06:40:17

+0

不幸的是,這並沒有幫助。骨幹和下劃線庫在我開發時沒有縮小,所以它們只是backbone.js和underscore.js。 – 2013-02-12 13:35:55

+0

如果它沒有被縮小,在路徑中只需放置主幹:'沒有.js的骨幹文件的名稱',並且是的,我相信Paul是正確的,您需要將下劃線:'沒有.js的下劃線文件的名稱'放入路徑也是如此。我已經更新了我的答案以反映這一點。 – landland 2013-02-12 15:35:02

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