2014-01-19 1 views
2

속성 : 나는 폐쇄 컴파일러는 myElement.div의 유형을 모르는 것으로 나타났습니다자바 스크립트 구글 폐쇄 주석 내가 자바 스크립트 UI는 다음과 같이 객체가 유형

function MyUIElement() { 
    div = document.createElement("div"); 
    div.id = "my_element_x"; 
    div.innerHTML = "whatever"; 
    ... 

    this.hide = function() { 
     div.style.display = "none"; 
    }; 

    this.show = function() { 
     div.style.display = "block"; 
    }; 

    this.showData = function(data) { 
     ... 
    } 

    this.div = div; 
} 

function addUIElement(element) { 
    app_div.appendChild(element); 
} 

myElement = new MyUIElement(); 
addUIElement(myElement.div) 

, 그래서 나는 그것을 위해 유형을 추가 :

function MyUIElement = { 
    /** 
    * @type {Element} 
    */ 
    div = document.createElement("div"); 
    div.id = "my_element_x"; 
    div.innerHTML = "whatever"; 
    ... 

하지만 여전히 유형을 알지 못합니다. 형식을 인식하려면 "this.div = div"주석을 달아야합니다.

나는 이런 종류의 시나리오에 대한 최상의/일반적인 해결책이 무엇인지 궁금 할뿐입니다. 두 번 주석 달기를 피하기 위해 div에 액세스 할 때마다 this.div를 사용해야합니까? MyUIElement 클래스의 public/private 변수를 제어해야하는 다른 방법이 있습니까?

답변

1

구문 오류가 여러 개 있습니다. 전역 변수 div을 제거하고 함수 선언을 수정하십시오 (즉, function MyUIElement() {). 또한 this.showData이 잘못 선언되었습니다. compileduncompiled

당신이 (당신이 지정되지 않음) 당신이 생성자에 대한 컴파일러에 몇 가지 힌트를 추가해야하고 있습니다 고급에서 컴파일하는 경우를 : 이러한 문제를 수정

function MyUIElement() { 
    /** 
    * @type {Element} 
    */ 
    var div = document.createElement("div"); 
    div.id = "my_element_x"; 
    div.innerHTML = "whatever"; 

은 나를 위해 올바르게 컴파일하자 공개적으로 액세스 할 수있는 변수로 간주되는 항목 this

/** 
* some description 
* @expose 
* @constructor Necessary to specify that this is a constructor function 
*/ 
var MyUIElement = function() { 
    /** @expose expose means this is accessible to the public don't minimize the var name */ 
    var div = this.div = document.createElement("div"); 
    div.id = "my_element_x"; 
    div.innerHTML = "whatever"; 

    /** @expose */ 
    this.hide = function() { 
     div.style.display = "none"; 
    }; 

    /** @expose */ 
    this.show = function() { 
     div.style.display = "block"; 
    }; 

    /** @expose */ 
    this.showData = function(data) { 

    } 
} 
var myElement = new MyUIElement(); 
+0

감사합니다. 아직도 내 질문에 관련이 없습니다. – user3117610

+2

간단하고 고급 스 니펫을 컴파일 할 때 작동 했으므로 문제가 무엇입니까? 당신은 여전히 ​​전역 변수'div'를 가지고 있습니다. 'var div = this.div = ...'를 시도해보고 고급 컴파일러를 사용하고 있다고 가정합니다. – megawac

+1

'@ expose'은 (는) 더 이상 사용되지 않습니다. 제작자는 대신 @ export를 사용하도록 코드를 마이그레이션해야합니다. –