Как автоматически организовать сценарии, используемые пользовательскими компонентами Facelets? - PullRequest
1 голос
/ 11 мая 2011

Например, я создал несколько пользовательских компонентов пользовательского интерфейса, некоторые зависят от jquery-min.js, некоторые зависят от jQuery UI, некоторые зависят от jsTree, некоторые зависят от Dojo и т. Д.

Я могу импортировать необходимые библиотеки в каждом файле 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");
}

Или, может быть, мне следует поискать компонентДОМ, чтобы узнать, где я могу ввести ?вот так:

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

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

Ну очень неуклюжий.Есть какое-нибудь элегантное решение для этого?

1 Ответ

1 голос
/ 11 мая 2011

Похоже, вам нужно что-то вроде RequireJS для динамической загрузки зависимостей на странице.

...