RequireJS 循环依赖报 模块undefined 处理方案

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);
}
}
});

时间: 2024-08-18 02:23:49

RequireJS 循环依赖报 模块undefined 处理方案的相关文章

ueditor在使用requirejs时,报ZeroClipboard undefined错误

再网上找到了 http://blog.csdn.net/xundh/article/details/44536665       这样一篇文章, 其中原因说的很明白了 是因为在有requirejs时,ZeroClipboard不会把自己暴露为全局变量. 解决方法在此不赘述了,我说一下一种更粗暴的解决方法 在百度编辑器当中,找到ZeroClipboard.js 在 third-party 文件夹下的zeroclipboard下 在最后有这样一段代码 if (typeof define === "f

记 suds 模块循环依赖的坑

下面是soa接口调用的核心代码 #! /usr/bin/python # coding:utf-8 from suds.client import Clientdef SoaRequest(wsdl,fnname,data): soaService = Client(wsdl).service soaRep = getattr(soaService,fnname)(data) return soaRep 问题就这样出现了: 我调用一个接口,总是报错,见下图: 之后Debug断点定位到suds模块

requirejs解决异步模块加载方案

他首先会遍历enableRegistry取出其中定义的模块,并且将没有加载成功的模块标识注入noLoads数组,如果过期了这里就会报错 如果上述没问题还会做循环依赖的判断,主要逻辑在breakCycle中,因为我们这里不存在循环依赖便跳出了,但还未结束 我们这里开始了递归检测依赖是否载入 if ((!expired || usingPathFallback) && stillLoading) { //Something is still waiting to load. Wait for

Python开发常见问题之各模块循环依赖

今天写了一个程序,由于设计上的问题,导致两个模块需要相互引用,出现了“importError”错误.分析良久,对于模块循环依赖的问题有两种方法: 1.可通过调整import导入顺序来解决,把 import 语句放到方法定义的后面即可 2.两个模块写到一个文件里面去 对于此类问题Python并没有提供解决方案,所以尽量在设计之初就要避免出现模块循环依赖问题,以免开发后期大刀阔斧的修改.

拦截器报循环依赖错误

拦截器 @Slf4j @Component public class LcOpPermissionInterceptor extends HandlerInterceptorAdapter { ...... } 将拦截器注入适配器中 @Configuration public class LcOpWebMvcConfigurer extends WebMvcConfigurerAdapter { @Autowired private LcOpPermissionInterceptor lcOpP

node js 循环依赖问题

循环依赖,简单点来说就是a文件中require b文件,然后b文件中又反过来require a文件.这个问题我们平时可能并不大注意到,但如果处理不好可能会引起一些让人摸不清的问题.在node中,是如何处理循环依赖的问题的呢? 写个简单的例子来试验一下看吧.定义两个文件:a.js var b = require('./b'); console.log('a.js get b:' + b.b); module.exports.a = 1;</pre>b.js var a = require('./

测试一下25道Spring经典面试题你会几道?循环依赖面试详解

前言 先看看什么是循环依赖当一个ClassA依赖于ClassB,然后ClassB又反过来依赖ClassA,这就形成了一个循环依赖:ClassA -> ClassB -> ClassA循环依赖-->2个或以上bean 互相持有对方,最终形成闭环.Spring中循环依赖的场景:1.构造器的循环依赖.(spring也无能为力)2.setter循环依赖:field属性的循环依赖[setter方式 单例,默认方式-->通过递归方法找出当前Bean所依赖的Bean,然后提前缓存[会放入Cach

JAVA循环依赖

最近看到一个问题:如果有两个类A和B,A类中有一个B的对象b,B类中有一个A的对象a,那么如何解决这两个类的相互依赖关系呢? 示例代码1 public class Test{ public static void main(String[] args) { B testb = new B(); } } class A{ public B b; public A (){ b = new B(); } public void printB(){ System.out.println("Ab"

升级redis3.2.7编译报错“ undefined reference to `clock_gettime&#39;”

由于redis有个紧急的安全漏洞更新所以我升级线上的redis-cluster的版本.编译时报了一个错:" redis-3.2.7/deps/jemalloc/src/nstime.c:120: undefined reference to `clock_gettime' collect2: ld returned 1 exit status make[1]: *** [redis-server] Error 1 make[1]: Leaving directory `redis-3.2.7/s