|
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
Проверка загружаемых данных из XML
Итак в первом кадре загружаю XML
folder_path="/right_menu_xml/"; rubric_name = new Array(); //Создаем массив названия рубрик rubric_url = new Array(); //Создаем массив URL к рубрикам // Загрузка названия рубрик из XML var robric_xml = new XML(); //создаем объект XML robric_xml.ignoreWhite = true; //Игнорируем пробелы robric_xml.onLoad = function() { var nodes0:Array = this.firstChild.childNodes; //childNodes - Массив дочерних узлов указанного объекта XMLNode. firstChild - Оценивает указанный объект XMLDocument и ссылается на первый дочерний узел в списке дочерних узлов узла-родителя. for(var i0=0;i0<nodes0.length;i0++) { rubric_name.push(nodes0[i0].attributes.rubname); //получаем имя фотки и присваиваем их переменной photo_filename rubric_url.push(nodes0[i0].attributes.ruburl); //получаем имя фотки и присваиваем их переменной photo_filename } } robric_xml.load(folder_path+"rubrics.xml"); //Указываем путь к файлу XML this.onEnterFrame = function() { if( robric_xml.loaded ) { trace ("rubrics.xml загружен"); play(); //Если файл загружен то играем дальше } else //Если файл загружен не до конца то ждем { stop(); } } Вопрос правильно ли так проверять или лучше иным способом? |
|
|||||
Модрон-ветеринар
|
Не правильно. Зачем вам вообще эта конструкция в this.onEnterFrame ? Вообще убирайте onEnterFrame. Уже есть нормальный обработчик события robric_xml.onLoad - он, собственно, для этого и нужен - вставляйте play() после парсинга данных - после цикла for.
А stop() должен стоять в самом начале кода для первого кадра, а не вызываться с частотой кадров.
__________________
Идите первым! Последний раз редактировалось mooncar; 18.01.2012 в 11:42. |
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
т.е. по сути код во втором кадре вообще не нужен?
Просто остановить первый кадр и на onLoad поставить play, я правильно понял? А каким образом отслеживается тогда полностью ли загрузились данные? Или программа будет стоять в первом кадре пока все не загрузит? Добавлено через 1 минуту т.е. делать так? folder_path="/right_menu_xml/"; rubric_name = new Array(); //Создаем массив названия рубрик rubric_url = new Array(); //Создаем массив URL к рубрикам // Загрузка названия рубрик из XML var robric_xml = new XML(); //создаем объект XML robric_xml.ignoreWhite = true; //Игнорируем пробелы robric_xml.onLoad = function() { var nodes0:Array = this.firstChild.childNodes; //childNodes - Массив дочерних узлов указанного объекта XMLNode. firstChild - Оценивает указанный объект XMLDocument и ссылается на первый дочерний узел в списке дочерних узлов узла-родителя. for(var i0=0;i0<nodes0.length;i0++) { rubric_name.push(nodes0[i0].attributes.rubname); //получаем имя фотки и присваиваем их переменной photo_filename rubric_url.push(nodes0[i0].attributes.ruburl); //получаем имя фотки и присваиваем их переменной photo_filename } play(); } robric_xml.load(folder_path+"rubrics.xml"); //Указываем путь к файлу XML stop(); |
|
|||||
Модрон-ветеринар
|
Цитата:
1-й кадр: stop() - чтобы головка воспроизведения не перешла дальше. - пишем в самом начале, а не в конце. Загрузка XML и проверка загруженности. Обработчик события XML.onLoad - это и есть обработчик события загрузки XML-файла, а не просто какой-то контейнер для офомления парсера XML-данных. В нем, после парсинга данных и прописать play(), то есть по готовности загрузки и разбора данных проигрываем дальше. Идеологию понимаете? Есть события, который происходят во флешке. И мы назначаем функцию, которая должна вызваться при наступлении этого события. Код ActionScript работает асинхронно, то есть не ожидает сам по себе, когда что-то будет готово, поэтому нужно обрабатывать события, чтобы двигаться дальше по алгоритму приложения. onLoad, onEnterFrame, onMouseMove - это названия событий. И если их приравнять анонимной функции, как это часто делают в примерах, то эти функции будут выполняться, когда эти события наступят. Потому эти функции и н-ся "обработчиками событий". Лично я предпочитаю не использовать анонимные функции, а давать обработчику ссылку на поименованную функцию, объявленную где-то в общем блоке всех функций.
__________________
Идите первым! Последний раз редактировалось mooncar; 18.01.2012 в 12:17. |
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
Да все понял, только не понял немного со stop();
разве есть разница вначале он будет или в конце, ведь по сути код сначало весь читается а потом по порядку (ну кроме функций естественно) выполняется и на stop() он должен по любому остановить кадр даже если команда будет где то в середине кода или я ошибаюсь? |
|
|||||
Модрон-ветеринар
|
Лучше и правильнее в начале. И с т.зр. приучиться сразу так делать во избежании ошибок в будущем, да и с т.зр. алгорима.
__________________
Идите первым! |
|
|||||
Регистрация: Aug 2010
Сообщений: 282
|
ок спасибо огромное за просветление, я получил +1 к интеллекту )))
|
|
|||||
Модрон-ветеринар
|
Пожалуйста
__________________
Идите первым! |
Часовой пояс GMT +4, время: 17:59. |
|
« Предыдущая тема | Следующая тема » |
Теги |
xml , XML Loading and Save , загрузка данных |
|
|