2013-04-26 2 views
1

여러 개체가 있습니다. 하나는 DomDependent라고하며, 하나는 WorkFlow라고하며, 하나는 중개자라고합니다.종료 후 버그 코드 컴파일

myApp.DomDependent.attachEvents=function(){ 
    myApp.mediator.attach("doConversion",mmt.WorkFlow.doConversion); 

DomDependent 레지스터 중재자의 "이벤트"와 워크 플로우 기능을 가지고이를 구현하기 :

domdependent는 다음과 같은 코드가 있습니다. DomDependent 이후 WorkFlow로 코드를 컴파일하면 이벤트가 등록되지만 함수는 null입니다. DomDependent 전에 나열된 WorkFlow로 컴파일 할 때 일부 이벤트가 등록되지 않고 일부 이벤트가 구현되지 않습니다.

myApp.DomDependent.removeAdded(); 

I : 워크 플로우에서

:

나는 워크 플로 개체가 호출이 텍스트 상자 값 등을 얻을뿐만 아니라 Domdependent 할 수 있습니다로 순환 종속성을 구현하는 올바른 방법이 무엇인지 확실하지 않다 goog.require를 DomDependent (WorkFlow에)와 WorkFlow (DomDependent)에 모두 넣으려고했으나 순환 종속성으로 인해 컴파일되지 않습니다.

는 그래서 파일을 myApp에 goog.require 문을 제거하고 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의 모든 코드가 제거되고 중재자로 등록 된 이벤트를 트리거하면 정의되지 않은 호출이 시도됩니다.

함수가 제거되지 않았고 중재자를 통해 호출되지만 컴파일러가 그 중 몇 개를 놓친다 고 생각하고 아직 그 이유를 찾지 못했습니다. 컴파일되지 않은 코드는 작동하지만 편집 후 중개자는 존재하지 않는 함수를 호출하려고합니다 (중재자도 컴파일되므로 이름 바꾸기 기능 부분이 아닙니다).

[UPDATE]

는 I 의심 이벤트가 등록되지 않은 하나 개의 버그를 발견했다. 그것은 등록되었지만 변수의 이름 변경 때문에 아무 것도하지 않습니다.

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; 
    ... 
컴파일 된 버전의

개체 변수 시작하지 않고 종료 속성 어디없는 [ "시작"] 여기서 : 또는 어느 라인의 시작 또는 끝 부분에 문자를 추가,이 함수는, 예를 들어 정의되지 않았습니다.

나는 여전히 순환 형 파일을 컴파일하는 것이 올바른지 알고 싶습니다.

답변

1

beginend 속성을 인용해야합니다. 현재 인용 부호가있는 속성과 점 바꾸기로 둘 다 참조하여 속성 이름 변경 제한 ADVANCED_OPTIMIZATIONS을 위반합니다. Implications of global variable, function, and property renaming

var where={begin:"",end:""}, //unquoted - quote these to fix 

where[whereTo]=... //quoted 
+0

차드에게 감사드립니다. 이제 내가 문제를 일으킨 원인을 알고 goog.require를 내 파일에 추가하고 cacldeps.py 매개 변수에서 --input 중 일부를 제거하려고합니다. 파일이 호출되는 순서대로 goog.require를 설정해야합니다. DomDependent가 먼저 중재자에게 이벤트를 첨부하기 위해 호출되므로 goog.require를 WorkFlow에 설정합니다. – HMR

+0

deps.js에 myApp.Classes를 추가 했으므로 goog.require ("myApp.DomDependent") 및 컴파일되지 않은 코드 만 추가합니다. 컴파일 된 코드는 (예를 들어) DomDependent에 goog.require ('myApp.WorkFlow')가 있기 때문에 작동합니다. DomDependent는 페이지로드시 전나무가 호출되는 기능을 가지고 있기 때문에 시작됩니다. – HMR