2011-08-26 5 views
3

모든 YUI 위젯을 반복하는 방법을 찾고 있습니다. 모든 위젯에서 함수를 호출하고 싶습니다.모든 YUI 위젯을 반복하십시오.

클래스 yui3-widget을 사용하여 모든 요소를 ​​선택하려고했으나 위젯이 렌더링되는 div 요소 만 가져옵니다. 내가 원하는 것은 모든 물건이다. 그래서 이것은 내가 원하는 것을하지 않는 것 같습니다 :

YUI().use ('*', function (Y){ 
    $('.yui3-widget').each (function (idx, elem) { 
     var id = elem.getAttribute('id'); 
     console.log (Y.Widget.getByNode(id)); 
     console.log ('#'+id); 
    }) 
}) 

당신이 제안하는 방법이 있습니까?

답변

3

세 가지보기 :

.1. 라이브러리 (YUI 및 Jquery)를 결합하는 것은 가능하지만 매우 혼란 스럽습니다. 우리는 그것이 필요하다고 생각할 수는 있지만 그것을 가지고 굴러갑니다.

.2. "getByNode"가 YUI 노드 또는 선택기 문자열을 기다리고 있습니다. 그 행은 읽어야합니다 :

console.log (Y.Widget.getByNode('#' + id)); 

.3. YUI().use (... 행은 위젯을 포함하지 않는 새로운 YUI 샌드 박스를 선언하고 있습니다. 페이지에있는 일치하는 모든 ".yui3-widget"항목에 노드 목록이 반복되고 있지만 해당 위젯 중 어느 것도 새 샌드 박스에 등록되지 않으므로 Y.Widget.getByNode('#' + id)은 null을 반환합니다. 이 문제를 해결하려면 위젯을 만든 샌드 박스에 코드를 넣거나 "use"함수 호출을 위해 샌드 박스에 대한 포인터를 가져와야합니다. 다음과 같음 :

var sandbox = YUI().use('*', function (Y){ 

    // widgets defined here 
}); 

sandbox.use ('*', function (Y){ 
    $('.yui3-widget').each (function (idx, elem) { 
     var id = elem.getAttribute('id'); 
     console.log (Y.Widget.getByNode('#' + id)); 
     console.log ('#'+id); 
    }) 
}); 
관련 문제