RequireJS 循环依赖报 模块undefined 处理方案
2015-05-14 17:17
344 查看
RequireJS 循环依赖
开始学习使用RequireJS之后做了几个小例子,之后想着把手头的项目也用RequireJS写一遍试试。感觉胜利就在前方了,忽然发现始终卡在一个问题上:很常见的一个问题,根源就是获取不到当前的函数,反复检查了代码,发现并没有异常,纠结许久。
忽然想到之前看API的时候提到的“循环依赖”,当时“循环依赖比较罕见,它也是一个重构代码重新设计的警示灯。”让我直接忽略了这一部分的内容。
循环依赖,指的是两个模块之间相互依赖,即a依赖b,同时b依赖a,那么在这种情况下当b的模块函数被调用时,将会提示模块a undefined。
解决方法是b可以在模块已经定义好后用require()方法再获取,需要把require作为依赖注入进来。
即本来的写法是:
define(['jquery','a'],
function($, a){
return {
loading : function(data){
a.addBag(data);
}
}
});
一般说来你无需使用require()去获取一个模块,而是应当使用注入到模块函数参数中的依赖。现在为了解决循环依赖带来的问题,首先要引入require的依赖,使用require()方法去获取模块a。问题解决了。
define(['require','jquery','a'],
function(require, $, a){
return {
loading : function(data){
require('a').addBag(data);
}
}
});
相关文章推荐
- 支持seaJs和requireJs的前端模块开发方案(一):方案介绍
- 解决requirejs循环依赖问题
- 判定模块加载时是否存在循环依赖
- Maven项目如果涉及多个模块的话,设计的时候就要考虑模块循环依赖的问题
- 小心得:处理两个头文件互调,死循环情况(将文件之间的编译依赖关系降至最低)
- Spring源码解析:循环依赖的探测与处理
- 支持seaJs和requireJs的前端模块开发方案(三):加载器全局配置alias.js
- 记 suds 模块循环依赖的坑-RuntimeError: maximum recursion depth exceeded
- 依赖三方框架报V4包冲突的处理方案一
- Spring对加载的bean之间循环依赖的处理
- 支持seaJs和requireJs的前端模块开发方案(二):业务页面和入口脚本init.js
- 处理循环依赖
- 记 suds 模块循环依赖的坑-RuntimeError: maximum recursion depth exceeded
- 支持seaJs和requireJs的前端模块开发方案(四):AMD模式和CMD模式下的config.js
- 省时间的循环处理方法 方案。
- requirejs结合text.js及css.js等插件实现模块依赖开发(打包案例)
- seajs中模块依赖的加载处理实例分析
- js模块化之模块依赖处理
- Spring处理循环依赖
- 记一次Bug定位过程 —— 由非预期的页面提示到松耦合模块的依赖处理