[英]RequireJS with jQuery Validation
我正在尝试使用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']
}
});
但这会产生超时错误。
如果有人能解释为什么第二个解决方案不起作用那将是伟大的。 谢谢
我相信垫片中的键应该与您在模块中需要的名称相匹配。 此外,我认为它使用名称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!');
});
编辑:更多地考虑您的原始配置以及它为什么不起作用:您遇到的问题是您试图在填充部分中散布使用模块别名的完整路径。 RequireJS似乎不是这样工作的。 这似乎是一种单向解决方案:
请求的模块名称 - >从shim config扩展到任何其他模块 - >根据路径映射加载实际文件
而你要做的是:
请求的模块名称(jquery.validate) - >根据路径映射解析为实际文件(jquery.validate.custom) - >从shim config扩展到任何其他模块 - >再次解析路径
所以,例如,这工作正常:
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( ) {
});
您只需要在配置中修复一个密钥。 改变这一行:
'Scripts/jquery.validate.custom': ['jquery', 'Scripts/jquery.validate.unobtrusive']
有以下几点:
'jquery.validate': ['jquery', 'Scripts/jquery.validate.unobtrusive']
一切都会奏效。 这是因为如果您使用jquery.validate
作为路径,则需要在shim
config中使用相同的名称以使所有依赖项正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.