2011-05-11 2 views
1

예를 들어, 나는 몇 가지 사용자 정의 UI 구성 요소, 일부는 일부는 일부는 일부는 Dojo에 따라, jsTree에 따라, jQuery UI에 따라, jquery-min.js에 의존 등을 만든커스텀 Facelets 컴포넌트가 사용하는 스크립트를 자동으로 구성하는 방법은 무엇입니까?

나는 각 XHTML 파일에서 필요한 라이브러리를 가져올 수 있습니다

:

file1.xhtml 
<script src="jquery-min.js"></script> 
<script src="jquery-ui.js"></script> 
<script src="jsTree.js"></script> 
<my:tree> ... </my:tree> 

file2.xhtml 
<script src="jquery-min.js"></script> 
<script src="jquery-ui.js"></script> 
<script src="jquery-ui-dialog.js"></script> 
<script src="jquery-ui-autocompletion.js"></script> 
<my:autodialog> ... </my:autodialog> 

file3.xhtml 
<script src="jquery-min.js"></script> 
<script src="dojo.js"></script> 
<my:dojostuff> ... </my:dojostuff> 

이 매우 불편, 내가 어떤 라이브러리에 의존하는 구성 요소를 알고 있고, 종속성의 종속성.

템플릿 파일에 모든 종속성을 넣으면 확실히 간단 해지지 만 휴대 전화에 너무 많은 스크립트와 메모리가로드됩니다.

그래서 "UIAutoOrganizedScriptsComponent"와 같은 것이 있습니까?

현재 요청에 사용 된 구성 요소로 채워진 종속성을 포함하는 요청 범위의 해시 세트와 같은 것을 사용해야합니까? 나는 < 스크립트 >를 주입 할 수있는

static ThreadLocal<HashSet> requestScopedDependencies; 
static Map<String, URL> libraryURLs; 

MyTreeComponent extends UIOutput { 
    // ... 
    dependencies = requestScopeDependencies.get(); 
    dependencies.add("jstree"); 
} 

또는, 어쩌면 구성 요소 DOM이 찾아 검색해야? 이렇게 :

MyTreeComponent extends UIOutput { 
    // ... 
    UIComponent scriptsContainer = getParent().getParent().getChildren()[2].getChildren()[3]; 

    // search if scriptsContainer already included the script... 
    if (! included) { 
     scriptsContainer.addElement("<script>..."); 
    } 
} 

음, 매우 서투른. 이 일을하는 우아한 해결책이 있습니까?

답변

1

페이지에 동적으로 종속성을로드하려면 RequireJS 줄이 필요합니다.