我有几个对象;一个叫做DomDependent,一个叫做WorkFlow,一个叫做mediator。关闭后编译的Buggy代码
的domdependent具有下面的代码:
myApp.DomDependent.attachEvents=function(){
myApp.mediator.attach("doConversion",mmt.WorkFlow.doConversion);
DomDependent寄存器调解员“事件”和工作流程所具有的功能,以实现它们。当我在DomDependent之后编译带有WorkFlow的代码时,事件被注册,但函数为空。当我在DomDependent之前列出的WorkFlow进行编译时,有些事件根本不会被注册,有的使用函数来实现它们。
我不知道什么是实现循环依赖作为工作流对象进行调用Domdependent以及获取文本框的值和这样的正确方法:
从工作流程:
myApp.DomDependent.removeAdded();
我试图在DomDependent(WorkFlow)和WorkFlow中将doog.require放置到DomDependent,但由于循环依赖关系,它根本无法编译。
所以去除goog.require语句对myApp中的文件,并提供它们作为命令行参数calcdeps.py:
set calc="D:\software\closure compiler\library\closure\bin\calcdeps.py"
c:\Python27\python.exe %calc%^
--path D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\myApp\Mediator.js^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\myApp\WorkFlow.js^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\myApp\data.js^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\myApp\Messenger.js^
--input D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\myApp\DomDependent.js^
--compiler_jar "D:\software\closure compiler\compiler.jar"^
--output_mode compiled^
--compiler_flags="--compilation_level=ADVANCED_OPTIMIZATIONS"^
--compiler_flags="--formatting=PRETTY_PRINT"^
--compiler_flags="--warning_level=VERBOSE"^
--output_file D:\flex_sdk_4.6\projects\EnglishConverter\bin\js\main.js
pause
我的问题是:
这是获得正确的方式依赖?如果我在DomDependent中选择goog.require
,那么WorkFlow中的所有代码都将被删除,触发任何使用mediator注册的事件将尝试调用undefined。
如何确保函数不会被删除,它们是通过中介调用的,但我认为编译器会遗漏其中的几个函数,但我还没有找出原因。未编译的代码工作,但在编译之后,中介器尝试调用未知函数(中介器也被编译,因此它不是重命名函数部分)。
[更新]
找到了我怀疑事件未注册的一个错误。它已注册但因重命名变量而不做任何事情。例如,这功能,增加了文本要么到一行的开头或结尾:
myApp.WorkFlow.addBegin=function(){
myApp.WorkFlow.addEndOrBegin("begin");
};
myApp.WorkFlow.addEndOrBegin=function(whereTo){
var where={begin:"",end:""},
lines=myApp.DomDependent.getAddwordsContent(false).split("\n"),
i;
where[whereTo]=mmt.DomDependent.getBeginEnd();
for(i=0;i<lines.length;i++){
lines[i]=where.begin+lines[i]+where.end;
...
在编译版本的其中对象变量不具有开始和结束的属性,以便在那里[“开始”]不存在或未定义。
我仍然想知道编译循环依赖文件的正确方法是什么。
谢谢乍得,有道理。现在我知道是什么导致了这个问题,我会尝试将goog.require添加到我的文件中,并从cacldeps.py参数中删除一些--input。必须按照如何调用文件的顺序设置goog.require。首先调用DomDependent将事件附加到介体,以便在WorkFlow中设置goog.require。 – HMR 2013-04-27 00:38:52
我在deps.js中添加了myApp.Classes,现在我只添加goog.require(“myApp.DomDependent”)和未编译的代码。编译代码的工作原因是(例如)DomDependent具有goog.require('myApp.WorkFlow')。它从DomDependent开始,因为它具有在页面加载时首先调用的函数。 – HMR 2013-04-27 01:28:05