Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.09.2010, 10:40
serafxx вне форума Посмотреть профиль Отправить личное сообщение для serafxx Найти все сообщения от serafxx
  № 1  
Ответить с цитированием
serafxx

Регистрация: Sep 2010
Сообщений: 2
По умолчанию Не меняется свойство length массива

Начал знакомство с flash, пишу upload файлов. Наткнулся на странную вещь и не пойму то ли лыжи не едут..

Установил AdobeFlashProf CS5 (11.0.0.485).
Пишу скриптик (ActionScript3) используя FileReferenceList: пользователь выбирает файлы, затем они добавляются из FileReferenceList.fileList в массив состоящий из FileReference (это для того, чтобы пользователь мог несколько раз открывать окно выбора файлов и формировался большой список файлов).

Когда я запускаю это дело под фаерфоксом вот в этом месте:
Код AS3:
filesToUpload.push(FileReference(event.target.fileList[i]));
trace('PUSHED! filesToUpload.length:'+filesToUpload.length);
trace(filesToUpload.toString());
длина массива остается неизменной(первый trace выдает 0, а второй показывает, что массив не пустой), а вот в ie все работает нормально.
Причем длина не меняется только после первого добавления. Следующие добавления все идет нормально.

Весь в растерянности..

Вот всё целиком:

Код AS3:
buttonSelect.addEventListener(MouseEvent.CLICK, buttonSelectClick);
buttonUpload.addEventListener(MouseEvent.CLICK, buttonUploadClick);
 
var fileReference:FileReferenceList = new FileReferenceList();
 
fileReference.addEventListener(Event.SELECT, onSelectFile);
fileReference.addEventListener(Event.CANCEL, onCancelDialog);
 
 
var filesToUpload:Array = new Array();
 
var fileFilter:FileFilter = new FileFilter("Images", "*.png;*.gif;*.jpg");
 
function buttonSelectClick(event:MouseEvent):void{
 
	try {
 
		fileReference.browse([fileFilter]);
 
	}catch(illegalOperation:IllegalOperationError) {
 
		trace(illegalOperation.toString());
 
	}
 
}
 
function buttonUploadClick(event:MouseEvent){
 
	var urlRequest:URLRequest = new URLRequest("http://test/pub/fileUploader.php");
 
	var i;
	for(i=0;i<filesToUpload.length;i++){
		try{
			filesToUpload[i].upload(urlRequest);
		}catch(e){
			trace(e.toString());
		}
		trace('Uploaded file: '+filesToUpload[i].name);
	}
 
}
 
function onSelectFile(event:Event):void {
 
	var i,ii;
	var found;
 
	buttonUpload.enabled=true;
 
	for(i=0;i<event.target.fileList.length;i++){
		//trace('i: '+i);
		found=false;
 
		for(ii=0;ii<filesToUpload.length && !found;ii++){
			//trace('ii: '+ii);
			//trace('filesToUpload[ii].name:'+filesToUpload[ii].name);
			//trace('event.target.fileList[i].name:'+event.target.fileList[i].name );
			if(filesToUpload[ii].name==event.target.fileList[i].name && filesToUpload[ii].size==event.target.fileList[i].size && filesToUpload[ii].creationDate.time==event.target.fileList[i].creationDate.time){
				found=true;
			}
			//trace('found: '+found);
		}
		if(!found){
 
			filesToUpload.push(FileReference(event.target.fileList[i]));
			filesToUpload[filesToUpload.length-1].addEventListener(ProgressEvent.PROGRESS, onFileProgress);
			//trace('PUSHED! filesToUpload.length:'+filesToUpload.length);
			ExternalInterface.call(
				"callback_addFile",
				event.target.fileList[i].name,
				event.target.fileList[i].size,
				event.target.fileList[i].type,
				event.target.fileList[i].creationDate.time,
				filesToUpload.length-1
			);
 
			trace('Addng file '+event.target.fileList[i].name);
 
		}else{
			trace('file '+event.target.fileList[i].name+'is already in array');
		}
 
 
	}
 
	trace('filesToUpload: '+filesToUpload.toString());
 
}
 
function onFileProgress(event:ProgressEvent):void {
    trace( event.bytesLoaded + " of " + event.bytesTotal + " bytes");
	ExternalInterface.call(
		"callback_progress",
		filesToUpload.length-1
	);
}
 
function onCancelDialog(event:Event):void {
    trace(event.target);
}
Из-за этого дела у меня в массиве может оказаться несколько одинаковых файлов, чего низзя..


Последний раз редактировалось serafxx; 28.09.2010 в 12:24.
Старый 28.09.2010, 12:15
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я вам советую переписать на свежую голову это всё. Сейчас этот вырвиглазный код ужасен и его невозможно прочитать. И почему вы для оформления кода использовали тег цитаты?

Старый 28.09.2010, 12:28
serafxx вне форума Посмотреть профиль Отправить личное сообщение для serafxx Найти все сообщения от serafxx
  № 3  
Ответить с цитированием
serafxx

Регистрация: Sep 2010
Сообщений: 2
Исправил, не туда сразу щелкнул.

Я переписывал этот кусок) и долго отлаживал, но не нашел ничего.

Больше всего меня смущает разное поведение в разных браузерах..

Добавлено через 5 минут
как вообще после этого:
Код AS3:
filesToUpload.push(..);
может не поменяться length!?

Добавлено через 6 часов 0 минут
Господа, неужели никто не поможет?

Добавлено через 45 часов 42 минуты
Разобрался.

Лажа была в вызове javascript:
Код AS3:
ExternalInterface.call(
                "callback_addFile",
                event.target.fileList[i].name,
                event.target.fileList[i].size,
                event.target.fileList[i].type,
                event.target.fileList[i].creationDate.time,
                filesToUpload.length-1
            );
После вызываемая функция изменяла див в котором находится объект флеш (используя append из JQuery) и из-за этого происходило непонятно что.

Создать новую тему Ответ Часовой пояс GMT +4, время: 11:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 11:24.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.