2013-06-23 46 views
1

在清除我的緩存後的應用程序的初始負載我得到一個jquery未定義bc應用程序正試圖加載jquery驗證之前jquery已加載。刷新後,所有內容都可以加載並正常工作。我以爲我正確設置了這一點,但我錯過了什麼?使用backbone.js,require.js和jquery。腳本加載順序錯誤 - require.js

Main.js:

require.config({ 
    paths: { 
    'jquery': 'libs/jquery/jquery-min', 
    'underscore': 'libs/underscore/underscore-min', 
    'backbone': 'libs/backbone/backbone-min', 
    'validate': 'jquery.validate-1.11.1.min', 
    'templates': '../templates' 
    }, 

shim: { 
    jquery: { 
    exports: "jquery" 
    }, 
    underscore: { 
    exports: '_' 
    }, 
    backbone: { 
    deps: ['underscore', 'jquery'], 
    exports: "backbone" 
    }, 
    validate: { 
    deps: ['jquery'], 
    exports: "validate" 
    } 
}, 

}); 

require([ 
    'app' 

], function(App){ 
    App.initialize(); 
}); 

App.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'validate', 
    'router', 
    'scripts' 
], function($, _, Backbone, validate, Router, scripts){ 
var initialize = function(){ 
    Router.initialize(); 
}; 

return { 
    initialize: initialize 
}; 
}); 

這裏是我的文件更新,但仍然沒有運氣:

require.config({ 
    paths: { 
'jquery': 'libs/jquery/jquery-min', 
'underscore': 'libs/underscore/underscore-min', 
'backbone': 'libs/backbone/backbone-min', 
    'validate': 'jquery.validate-1.11.1.min', 
'templates': '../templates' 
    }, 

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

}); 

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

應用.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'validate', 
    'router', 
    'scripts' 
], function($, _, Backbone, validate, Router, scripts){ 
    var initialize = function(){ 
Router.initialize(); 
    }; 

return { 
    initialize: initialize 
    }; 
}); 
+0

我檢查了firebug html,它看起來像腳本正確的順序加載 - 要求,主要,應用程序,jquery,下劃線,骨幹,驗證,但我仍然得到的jquery是未定義錯誤的驗證插件。 – user1572796

回答

0

你從哪裏得到了回報?你可以粘貼一個堆棧跟蹤?

還值得檢查的是jQuery的網址。在瀏覽器中鍵入你的jquery的URL(以'libs/jquery/jquery-min'結尾'),看看它是否可以找到。

+0

感謝您的回覆,jquery在那裏,並加載罰款 – user1572796

0

exports必須具有第三方腳本所期望的相同類型的情況。在這種情況下:jQueryBackbone

require.config({ 
    paths: { 
     'jquery': 'libs/jquery/jquery-min', 
     'underscore': 'libs/underscore/underscore-min', 
     'backbone': 'libs/backbone/backbone-min', 
     'validate': 'jquery.validate-1.11.1.min', 
     'templates': '../templates' 
    }, 
    shim: { 
     jquery: { 
      exports: "jQuery" 
     }, 
      underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: ['underscore', 'jquery'], 
      exports: "Backbone" 
     }, 
     validate: { 
      deps: ['jquery'], 
      exports: "validate" 
     } 
    }, 
}); 
+0

感謝您的答覆,改變了出口,它似乎沒有任何影響 – user1572796

+0

您是否刪除瀏覽器緩存? – orange

+0

是的,甚至雙重檢查了最新的加載進來的螢火蟲。我確定這是簡單的,我忽略了。 – user1572796

0

exports屬性需要匹配全局屬性名稱 - jQuery中的情況下,它需要要麼$jQuery。對於骨幹網,它需要是Backbone

你也不需要使用jQuery來減震 - 它已經通過命名定義與AMD兼容了很長一段時間。請參閱https://github.com/jquery/jquery/blob/master/src/exports.js#L15-L17

+0

謝謝,更新了屬性名稱並刪除了jquery shim,但仍然沒有運氣 – user1572796

1

jquery驗證從這裏看到的是由$ .validate()調用的插件。

在這種情況下,您不需要進行任何導出。

你可以試試,看看這是否是對你有幫助:

shim: { 
     validate: { 
      deps: ['jquery'] 
     } 
    } 

你也可以看到,以供參考類似計算器的問題:How to make a jQuery plugin loadable with requirejs

-3

感謝您的答覆,我相信您的反饋固定我會遇到一些其他問題。看起來我使用的是require.js 0.27.0的一個非常舊的版本,並且升級到最新版本修復了jquery問題。