我试图使用RequireJS将引用添加到我的jQuery验证脚本文件中。我有3个脚本文件,而不是通常的1:
我已经设置了以下配置:
require.config({
paths: {
'jquery': 'Scripts/jquery-1.8.3.min',
'jquery.validate': 'Scripts/jquery.validate.custom'
},
shim: {
'Scripts/jquery.validate': ['jquery'],
'Scripts/jquery.validate.unobtrusive': ['jquery', 'Scripts/jquery.validate'],
'Scripts/jquery.validate.custom': ['jquery', 'Scripts/jquery.validate.unobtrusive']
}
});现在我有了以下模块:
define(['jquery', 'jquery.validate'], function($) {
alert('Yey!');
});但是,在jquery.validate.custom文件中抛出一个错误,告诉我没有注入不引人注目的依赖项。在使用浏览器工具进行了一些调试并查看了网络选项卡之后,我可以看到它成功地下载了jquery.validate.custom.js和jquery.validate.js文件,但它甚至没有尝试下载jquery.validate.unobtrusive.js文件。
如果有人能告诉我我做错了什么,我会很感激的。谢谢
编辑:
我现在已经试过:
require.config({
paths: {
'jquery': 'Scripts/jquery-1.8.3.min',
'jquery.validate': 'Scripts/jquery.validate.custom'
},
shim: {
'Scripts/jquery.validate': ['jquery'],
'Scripts/jquery.validate.unobtrusive': ['jquery', 'Scripts/jquery.validate'],
'jquery.validate': ['jquery', 'Scripts/jquery.validate.unobtrusive']
}
});而且工作正常。我还尝试了以下几点,因为我认为它看起来更好:
require.config({
paths: {
'jquery': 'Scripts/jquery-1.8.3.min',
'jquery.validate': 'Scripts/jquery.validate.custom',
'jquery.validate.core': 'Scripts/jquery.validate',
'jquery.validate.unobtrusive': 'Scripts/jquery.validate.unobtrusive'
},
shim: {
'jquery.validate.core': ['jquery'],
'jquery.validate.unobtrusive': ['jquery', 'jquery.validate.core'],
'jquery.validate': ['jquery', 'jquery.validate.unobtrusive']
}
});但这会导致超时错误。
如果有人能解释为什么第二个解决方案不起作用,那就太好了。谢谢
发布于 2013-06-07 17:25:41
您只需要修复配置中的一个键。更改这一行:
'Scripts/jquery.validate.custom': ['jquery', 'Scripts/jquery.validate.unobtrusive']包括以下内容:
'jquery.validate': ['jquery', 'Scripts/jquery.validate.unobtrusive']一切都会正常的。这是因为如果您使用jquery.validate作为路径,则需要在shim配置中使用相同的名称才能使所有依赖项正确工作。
发布于 2013-06-07 16:38:22
我相信垫片中的钥匙应该与你在模块中需要的名字相匹配。此外,我认为它混淆了使用名称jquery.validate的问题,然后将其映射到自定义。
对我来说,以下结构更直观:
require.config({
paths: {
jquery: 'Scripts/jquery-1.8.3.min',
jquery_validate: 'Scripts/jquery.validate'
jquery_validate_unobtrusive: 'Scripts/jquery.validate.unobtrusive'
jquery_validate_custom: 'Scripts/jquery.validate.custom'
},
shim: {
jquery: {
exports: ['jQuery', '$']
},
jquery_validate: ['jquery'],
jquery_validate_unobtrusive: ['jquery_validate'],
jquery_validate_custom: ['jquery_validate_unobtrusive']
}
});然后在您的模块中,请求自定义文件:
define(['jquery', 'jquery_validate_custom'], function($) {
alert('Yey!');
});编辑:会更多地考虑您的原始配置以及它为什么不能工作:您面临的问题是,您正在尝试在shim部分中使用完整路径和模块别名。RequireJS似乎不是这样工作的。这似乎是一个单向的解决过程:
请求的模块名称
而你想要做的是:
请求的模块名(jquery.validate)
因此,例如,它工作得很好:
require.config({
paths: {
module1: 'module1file',
module2: 'module2file',
module3: 'module3file'
},
shim: {
module3: ['module2'],
module2: ['module1']
}
});
require(['module3'], function( ) {
});但这并不意味着:
require.config({
paths: {
module1: 'module1file',
module2: 'module2file',
module3: 'module3file'
},
shim: {
module3: ['module2'],
module2file: ['module1']
}
});
require(['module3'], function( ) {
});https://stackoverflow.com/questions/16987677
复制相似问题