Jquery 脚本加载顺序错误-require.js
在清除缓存后首次加载应用程序时,我得到一个jquery未定义bc,应用程序试图在加载jquery之前加载jquery验证。刷新后,所有内容都加载并正常工作。我以为我设置正确,但我遗漏了什么吗?使用backbone.js、require.js和jquery Main.js:Jquery 脚本加载顺序错误-require.js,jquery,backbone.js,requirejs,Jquery,Backbone.js,Requirejs,在清除缓存后首次加载应用程序时,我得到一个jquery未定义bc,应用程序试图在加载jquery之前加载jquery验证。刷新后,所有内容都加载并正常工作。我以为我设置正确,但我遗漏了什么吗?使用backbone.js、require.js和jquery Main.js: require.config({ paths: { 'jquery': 'libs/jquery/jquery-min', 'underscore': 'libs/underscore/underscore
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
};
});
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();
});
App.js
define([
'jquery',
'underscore',
'backbone',
'validate',
'router',
'scripts'
], function($, _, Backbone, validate, Router, scripts){
var initialize = function(){
Router.initialize();
};
return {
initialize: initialize
};
});
define([
'jquery',
'underscore',
'backbone',
'validate',
'router',
'scripts'
], function($, _, Backbone, validate, Router, scripts){
var initialize = function(){
Router.initialize();
};
return {
initialize: initialize
};
});
你从哪里弄到的?你能粘贴一个stacktrace吗
同样值得检查的是jquery的url。在浏览器中键入jquery的url(以'libs/jquery/jquery-min'结尾),然后查看是否可以找到它。
导出
必须具有第三方脚本所期望的相同类型大小写。在这种情况下:jQuery
和Backbone
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"
}
},
});
exports
属性需要与全局属性名称匹配-对于jQuery,它需要是$
或jQuery
。对于主干,它需要是主干
您也不需要填充jQuery——它通过命名的define与AMD兼容了很长一段时间。请参见jquery validate,从这里可以看到,$.validate()调用了一个插件 在这种情况下,您不需要进行任何导出 您可以尝试看看这是否对您有帮助:
shim: {
validate: {
deps: ['jquery']
}
}
您还可以看到一个类似的stackoverflow问题供参考:谢谢您的回复,我相信您的反馈修复了我可能遇到的其他一些问题。看起来我使用的是一个非常旧的require.js 0.27.0版本,并升级到最新版本,修复了jquery问题。我检查了firebug html,看起来脚本的加载顺序正确-require、main、app、jquery、下划线、主干、,验证,但我仍然得到验证插件上的jquery是未定义错误。感谢您的回复,更改了导出,似乎没有任何效果。您是否删除了浏览器缓存?是的,甚至双击了正在加载最新版本的firebug。我肯定我忽略了一些简单的东西。你能在
validate
source的开头设置一个断点吗?也许你可以看看那里的globals并从中推断出其他东西谢谢,更新了属性名并删除了jquery垫片,但仍然没有运气