2011-12-08 2 views
4

페이지가 준비된 후에 일부 DOM 요소에 대한 정보를 얻고 싶습니다. 그러나 이것이 언제인지를 알지 못했습니다. document.on.contentLoadeddocument.on.readyStateChange을 사용해 보았지만 둘 중 어느 것도 작동하지 않는 것 같습니다. 다음 코드에서는 onContentLoaded()onReadyChanged()이 호출되지 않습니다.DOM이 Dart에서 준비되면 알려주는 방법은 무엇입니까?

class WhiteTrace { 

    WhiteTrace() {  
    } 

    void onContentLoaded(Event e) { 
    print("onContentLoaded"); 
    // This never gets called 
    } 

    void onReady() { 
    print("onReady"); 
    // Do stuff 
    } 

    void onReadyChanged(Event e) { 
    print("onReadyStateChanged"); 
    // This never gets called 
    if (document.readyState == "complete") { 
     onReady(); 
     document.on.readyStateChange.remove(onReadyChanged); 
    } 
    } 

    void onResize(Event e) { 
    // Do stuff 
    } 

    void run() { 
    write("Hello World!"); 
    document.on.contentLoaded.add(onContentLoaded); 

    window.on.resize.add(onResize); 

    document.on.readyStateChange.add(onReadyChanged); 
    print("readyState: " + document.readyState); 
    if (document.readyState == "complete") { 
     document.on.readyStateChange.remove(onReadyChanged); 
     onReady(); 
    } 
    } 

    void write(String message) { 
    // the HTML library defines a global "document" variable 
    document.query('#status').innerHTML = message; 
    } 
} 

void main() { 
    new WhiteTrace().run(); 
} 
+0

항상 'window.on.load'를 사용할 수 있습니다. 정확한 DOM 이벤트는'document.addEventListener ("DOMContentLoaded")'입니다. 그래서 try'document.on.DOMContentLoaded' – Raynos

+0

DocumentEvents 인터페이스에서 "DOMContentLoaded"라는 이벤트를 찾을 수 없습니다. 그것이 존재한다고 확신합니까? – Curyous

+0

DOMContentLoaded는 이벤트에 대해 정의 된 w3c 이름입니다. 나는 다트 또는 DOM 에뮬레이션 레이어에 대해 아무것도 모른다. document.addEventListener ("DOMContentLoaded", cb)' – Raynos

답변

7

DOM로드시주의가 필요하지 않습니다. DOM이 완전히로드 된 경우에만 Darts main이 시작됩니다.

http://www.dartlang.org/articles/embedding-in-html/

"다트 코드는 페이지가 구문 분석 된 후에 만 ​​실행됩니다. 다트 프로그래머는 DOM이 완전히로드 된 것으로 가정 할 수있다."

+2

이것은 기본적으로 이미 해고 됐어. 따라서 이벤트 핸들러는 결코 해고되지 않습니다. – Raynos

+0

코드가 이미이 사건을 처리하지만, 어쨌든 저는 이것이 더 이상 사실이라고 생각하지 않습니다. 처음에는 "loading"의 readyState를 얻었고 일부 HTML 요소에 대한 쿼리는 null을 반환합니다. 나중에 "complete"와 유효한 HTML 요소를 얻습니다. 포함 된 링크에는 "스크립트가로드되는 즉시 다트 코드를 실행할 수 있도록 고려하고 있습니다." – Curyous

관련 문제