у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет. Вопрос знатокам, что не так? |
Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 18:
XML
- Даем команду fileStructDoc на загрузку contents.php. Сценарий onLoad вызваем после загрузки.
fileStructDoc.load ('contents.php');
- Добавляем функциональность как открытым, так и закрытым директориям и закрываем уже открытые директории для поддержки взаимодействия с пользователем.
function toggleDirectory(item, index) { //isOpen is an attribute that we add when we open a К//directory. It will be null to start if (item.attributes.isOpen == 'true') { //user must click twice in order to close a directory if (lastDirectorySelected == item) { closeDirectory(item, index); } } else { openDirectory(item, index); } //keep track of user's last selection lastDirectorySelected = item; }
- Далее добавляем функциональность, которая будет поддерживать открытие директорий с помощью функции openDirectory.
function openDirectory(item, index) { item.attributes.isOpen = 'true'; for (var i = 0; i<item.childNodes.length; i++) { var node = item.childNodes[i]; var name = node.attributes.name;
- Теперь добавляем узлы категорий в список directories, выделяя заголовки по мере их углубления в структуру директорий. Цикл for в функции начинает работу на уровне узла из массива item.childNodes. Затем он переходит к его родительскому узлу, затем к родительскому узлу этого узла и т.д. до тех пор, пока не достигнет корневого узла с именем NAVIGATION. При каждой итерации он выделяет отступом запись, которая будет добавлена: чем глубже находится узел, тем больше будет смещена запись.
if (node.nodeName == 'CATEGORY') { //go up until we find the root for (var tempNode = item.childNodes[i]; tempNode.nodeName!= К'NAVIGATION'; tempNode = tempNode.parentNode) { //indent the entry name = ' ' + name; }
- Здесь мы располагаем наш узел на следующей позиции в списке директорий.
index++; directories.addltemAt(index, name, node); } } }
- Вводим код для закрытия директорий функцией closeDirectory.
function closeDirectory(item, index) { item.attributes.isOpen = 'false';
- Сначала проходим через каждый элемент, являющийся подкатегорией закрываемого.
for(var i = 0; item == item.childNodes[i].parentNode; i++) { var node = item.childNodes[i]; var name = node.attributes.name;
- Удаляем все подкатегории перед удалением категории рекурсивным вызовом функции closeDirectory.
if(node.attributes.isOpen == 'true') { closeDirectory( node, index + 1) } directories.removeItemAt(index + 1); } }
- Выполняем инициализацию списка files в функции для поддержки ввода пользователем, когда он происходит.
files.setChangeHandler('handleFilesSelection'); function handleFilesSelection(component) { var item = component.getSelectedltem().data; updatePath(item.parentNode); var name = item.attributes.name; var extension = item.attributes.extension; url = path + name + ' . ' + extension; getURL(url, '_blank'); }
Поддержку файлов можно осуществлять многими способами. Можно загружать JPG и SWF в текущий фильм, либо загружать документы XML в другой объект XML, однако, для простоты, мы загружаем все файлы в новое окно браузера.
- Нужно создать функцию для поддержки добавления любых файлов, которые могут существовать в данной категории.
function displayFiles (item) {
- Начнем с чистого листа.
files.removeAll(); Обрабатываем каждый из полученных узлов. for( var i = 0; i < item.childNodes.length; i++) { var node = item.childNodes[i]; var name = node.attributes.name; var extension = node.attributes.extension; Добавляем их в список files, если это файлы. if (node.nodeName == 'FILE') { files.addltem(name + ' .' + extension, node); } } }
- Наконец, нам необходима функция для отслеживания пути выбранной директории из той директории, в которой мы находимся в данный момент. Цикл for в функции выступает в том же качестве, что и код смещения, рассмотренный в шаге 13. Он начинает работу с уровня выбранного узла и затем идет вверх до достижения корневого узла. Для каждого встречающегося узла он строит путь из корня к выделенному элементу.
function updatePath(selectedNode) { //first clear the path path = ' '; //go up until we find the root for (var tempNode = selectedNode; tempNode.nodeName != К'NAVIGATION'; tempNode = tempNode.parentNode) { //prepend the parent root name and a slash to the front К//of the path path = tempNode.attributes.name + V + path; } }
Вот и все! Ваш фильм Flash должен выглядеть примерно так.
Разумеется, фильм будет отображать содержимое папок вашего компьютера, а не то, что показано на рисунке. Помните, что запускать его нужно с сервера, и запускать так, чтобы работал PHP-сценарий. Несомненно, вы можете изменить и настроить результат вашей работы согласно вашим нуждам и требованиям. После вам уже не придется снова к этому возвращаться. Единственное, что вам понадобится делать для управление содержимым - это добавлять или удалять директории или файлы.