我正在为客户开发一款游戏,而且我在使用require时遇到了一些困难。我只是将我的代码拆分为两个主要文件game.js
和gui.js
,它们似乎没有相互访问权限。
我首先定义的模块似乎可以访问第二个 - 但第二个模块无法访问第一个模块。
这是我的main.js
:
requirejs.config({
paths: {
jquery: [
'http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min',
'libs/jquery.min',
],
//libraries
kinetic: 'libs/kinetic.min',
gui: 'gui',
game: 'game'
},
shim: {
'gui': ['jquery', 'kinetic'],
'game': ['jquery', 'kinetic']
}
});
require([
'jquery', 'kinetic', 'gui', 'game'
], function($, Kinetic, Gui, Game) {
$(function(){
Gui.init();
Game.init();
});
});
在这种情况下,gui.js
可以访问游戏 - 但game.js
将Gui视为undefined
。如果我试图将Gui重新加入游戏,请将菜肴暂停。
我的game.js
定义了Gui:
define([
"jquery",
"kinetic",
"gui"
], function($, Kinetic, Gui){ ... });
我的gui.js
定义了游戏:
define([
"jquery",
"kinetic",
"game"
], function($, Kinetic, Game){ ... });
我是新要求的,所以我确定我只是做错了。如何让game.js
和gui.js
互相访问?如果您需要更多信息,请与我们联系。
答案 0 :(得分:2)
您有循环依赖:gui
→game
→gui
。这是有问题的。
在此问题上查看RequireJS的文档:http://requirejs.org/docs/api.html#circular
更好的是,打破循环依赖。这是一篇很好的文章,您可能也会找到其他文章:http://misko.hevery.com/2008/08/01/circular-dependency-in-constructors-and-dependency-injection/