首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RequireJS与jQuery验证

RequireJS与jQuery验证
EN

Stack Overflow用户
提问于 2013-06-07 15:24:16
回答 2查看 3.2K关注 0票数 3

我试图使用RequireJS将引用添加到我的jQuery验证脚本文件中。我有3个脚本文件,而不是通常的1:

  1. jquery.validate - jquery验证库
  2. jquery.validate.unobtrusive --这为jquery.validate.unobtrusive添加了一些不显眼的验证(这样您就可以使用数据属性并自动将它们连接起来)。这取决于jquery.validate
  3. jquery.validate.custom --这将添加我自己的自定义、不显着的验证方法,并依赖于jquery.validate.unobtrusive。

我已经设置了以下配置:

代码语言:javascript
运行
复制
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']
    }
});

现在我有了以下模块:

代码语言:javascript
运行
复制
define(['jquery', 'jquery.validate'], function($) {
    alert('Yey!');
});

但是,在jquery.validate.custom文件中抛出一个错误,告诉我没有注入不引人注目的依赖项。在使用浏览器工具进行了一些调试并查看了网络选项卡之后,我可以看到它成功地下载了jquery.validate.custom.js和jquery.validate.js文件,但它甚至没有尝试下载jquery.validate.unobtrusive.js文件。

如果有人能告诉我我做错了什么,我会很感激的。谢谢

编辑:

我现在已经试过:

代码语言:javascript
运行
复制
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']
    }
});

而且工作正常。我还尝试了以下几点,因为我认为它看起来更好:

代码语言:javascript
运行
复制
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']
    }
});

但这会导致超时错误。

如果有人能解释为什么第二个解决方案不起作用,那就太好了。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-07 17:25:41

您只需要修复配置中的一个键。更改这一行:

代码语言:javascript
运行
复制
'Scripts/jquery.validate.custom': ['jquery', 'Scripts/jquery.validate.unobtrusive']

包括以下内容:

代码语言:javascript
运行
复制
'jquery.validate': ['jquery', 'Scripts/jquery.validate.unobtrusive']

一切都会正常的。这是因为如果您使用jquery.validate作为路径,则需要在shim配置中使用相同的名称才能使所有依赖项正确工作。

票数 1
EN

Stack Overflow用户

发布于 2013-06-07 16:38:22

我相信垫片中的钥匙应该与你在模块中需要的名字相匹配。此外,我认为它混淆了使用名称jquery.validate的问题,然后将其映射到自定义。

对我来说,以下结构更直观:

代码语言:javascript
运行
复制
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']
    }
});

然后在您的模块中,请求自定义文件:

代码语言:javascript
运行
复制
define(['jquery', 'jquery_validate_custom'], function($) {
    alert('Yey!');
});

编辑:会更多地考虑您的原始配置以及它为什么不能工作:您面临的问题是,您正在尝试在shim部分中使用完整路径和模块别名。RequireJS似乎不是这样工作的。这似乎是一个单向的解决过程:

请求的模块名称

而你想要做的是:

请求的模块名(jquery.validate)

因此,例如,它工作得很好:

代码语言:javascript
运行
复制
require.config({
  paths: {
    module1: 'module1file',
    module2: 'module2file',
    module3: 'module3file'
  },
  shim: {
    module3: ['module2'],
    module2: ['module1']
  }
});

require(['module3'], function( ) {
});

但这并不意味着:

代码语言:javascript
运行
复制
require.config({
  paths: {
    module1: 'module1file',
    module2: 'module2file',
    module3: 'module3file'
  },
  shim: {
    module3: ['module2'],
    module2file: ['module1']
  }
});

require(['module3'], function( ) {
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16987677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档