2

我得到回來在IE8以下錯誤:錯誤在IE8的網站使用Backbone.js的W/Require.js

消息:預期的對象行:27字符:1代碼:0 URI: http://cdn.example.com/images/example4/js/libs/jquery.backgroundSize.js

消息: '$ .fn' 爲空或不是對象行:8字符:1代碼:0 URI: http://cdn.example.com/images/example4/js/libs/jquery.waitUntilExists.js

消息: 'FN' 爲空或不是對象行: 62字符:73編碼:0 URI: http://cdn.example.com/images/example4/js/libs/jquery.nicescroll.js

消息:預期的對象行:34字符:231代碼:0 URI: http://cdn.example.com/images/example4/js/libs/backbone.js

消息: '放空' 爲空或不是對象行:19字符:3代碼:0 URI: http://cdn.example.com/images/example4/js/models/auth.js

我們的網站是一個用Backbone.js和Require.js爲依賴管理構建的SPA。這個問題只在IE8上顯示(可能還有更早的版本)。除了最後一個由於'Vent'擴展Backbone.Event而導致的最後一個以外,這些文件都被創建爲Require.js配置文件中Backbone.js的填充。

Require.js配置:

requirejs.config({ 
    baseUrl: 'http://cdn.staging.example.com/images/example4/js', 
    paths: { 
     underscore: './libs/underscore', 
     jquery: './libs/jquery', 
     backbone: './libs/backbone', 
     example: './libs/example', 
     blockui: './libs/jquery.blockUI', 
     backgroundsize: './libs/jquery.backgroundSize', 
     nicescroll: './libs/jquery.nicescroll', 
     waituntilexists: './libs/jquery.waitUntilExists', 
     swfobject: './libs/swfobject', 
     spinner: './libs/jquery.spinner' 
    }, 
    //Create shims for Backbone 
    shim: { 
     'backgroundsize': { 
      deps: [ 'jquery'], 
      exports: 'backgroundsize' 
     }, 
     'nicescroll': { 
      deps: ['jquery'], 
      exports: 'nicescroll' 
     }, 
     'waituntilexists': { 
      deps: ['jquery'], 
      exports: 'waituntilexists' 
     }, 
     'spinner': { 
      deps: ['jquery'], 
      exports: 'spinner' 
     }, 
     'backbone': { 
      deps: [ 'underscore', 'jquery','blockui','backgroundsize','nicescroll', 'waituntilexists', 'swfobject', 'spinner'], 
      exports: 'Backbone' 
     } 
    } 
}); 

requirejs(['app'], 
    function(App){ 
     App.initialize(); 
    }); 

任何建議,這將是導致此,我們使用Backbone.js的0.9.2和2.0.6 Require.js。

+0

1 idea:你能確認jquery正在被下載嗎? (它看起來像缺少錯誤)。 – WiredPrairie 2013-02-15 01:27:38

+0

'app'路徑的定義除非是你的/ root/app? – adrian 2013-02-15 03:19:26

+0

從我看到jQuery被加載。是的,它是根應用程序。 – Valjas 2013-02-15 19:26:16

回答

0

IE有墊片的一些問題,你可以據我瞭解,從http://requirejs.org/docs/api.html#config-shim

只能使用其他的「墊片」模塊作爲依賴於墊高腳本或AMD圖書館讀到這裏http://requirejs.org/docs/errors.html#nodefine

那沒有依賴關係,並在創建全局(如jQuery或lodash)之後調用define()。否則,如果您使用AMD模塊作爲shim配置模塊的依賴項,則在構建之後,只有在構建中的shimmed代碼執行後才能評估AMD模塊,並且會發生錯誤。最終的解決方案是升級所有shimmed代碼以具有可選的AMD define()調用。

有可能是具有jQuery的作爲墊片或jQuery的的依賴性的問題沒有被加載所以想不出設置它的全球性的。

+0

查看您提供的鏈接和信息。會讓大家知道它是如何發展的。 – Valjas 2013-02-15 19:28:43

0

嘗試增加骨幹,以你的主要要求是這樣的:

requirejs(['app', 'backbone'], function(App){ App.initialize(); }); 

另外,儘量使用r.js生成一個連結文件(請確保您關閉優化),你可以看到的順序需要加載腳本。