Предупреждения в FileReference - не могу найти причину - PullRequest
0 голосов
/ 03 октября 2010

Я пытаюсь сделать загрузчик из нескольких фотографий (используйте FileReference).Я получаю предупреждения, но не знаю причину их появления.

предупреждение: невозможно связать со свойством 'fr' класса 'Object' (предупреждение не является классом IEventDispatcher): невозможно связать ссвойство 'name' в классе 'flash.net::FileReference' предупреждение: невозможно связать со свойством 'data' в классе 'flash.net::FileReference' предупреждение: невозможно связать со свойством 'fr' в классе 'Object' (класс не является IEventDispatcher) предупреждение: невозможно привязать к свойству «имя» класса «flash.net::FileReference» предупреждение: невозможно привязать к свойству «данные» класса «flash.net::FileReference'

import mx.events.CollectionEvent;
import flash.net.FileReferenceList;
import mx.collections.ArrayCollection;

[Bindable]
private var photos:ArrayCollection = new ArrayCollection;
private var frList:FileReferenceList = new FileReferenceList;

private function init():void
{
photos.addEventListener(CollectionEvent.COLLECTION_CHANGE,function():void
{ 
startUploadButton.enabled = (photos.length>0);
clearPhotosButton.enabled = (photos.length>0);
});
frList.addEventListener(Event.SELECT,addPhotos);
}

private function selectPhotos():void
{
var fileFilter:FileFilter = new FileFilter("Images jpeg","*.jpg;*.jpeg");
frList.browse([fileFilter]);
}

private function addPhotos(e:Event):void
{
for (var i:uint = 0; i < frList.fileList.length; i++)
{
var elem:Object = new Object;
elem.fr = FileReference(frList.fileList[i]);
elem.fr.load();
elem.fr.addEventListener(Event.COMPLETE,refreshThumb);
photos.addItem(elem);
}
}

private function refreshThumb(e:Event):void
{
photosList.invalidateList();
}

public function clearPhoto(data:Object):void
{
photos.removeItemAt(photos.getItemIndex(data));
photosList.invalidateList();
}

private function startUpload():void
{
photosProgressContainer.visible = true;
var request:URLRequest = new URLRequest();
request.url = "http://localhost/tempLoader-debug/upload.php";
var fr:FileReference = photos.getItemAt(0).fr;
fr.cancel();
fr.addEventListener(ProgressEvent.PROGRESS,uploadProgress);
fr.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadComplete);
fr.upload(request);
}

private function uploadProgress(e:ProgressEvent):void
{
photosProgress.setProgress(e.bytesLoaded,e.bytesTotal);
}

private function uploadComplete(e:DataEvent):void
{
photos.removeItemAt(0);
photosList.invalidateList();
if (photos.length > 0) 
startUpload();
else
photosProgressContainer.visible = false;
}

1 Ответ

1 голос
/ 03 октября 2010

Это предупреждение возникает из-за того, что вы пытаетесь привязать свойства fr, FileReference.name и FileReference.data в вашем средстве визуализации элементов или где-либо еще. Это может вас не беспокоить (не знаю весь ваш код), но чтобы избежать их, сделайте следующее:

Поставщик данных со строгим типом данных

Заполните photos объектами специального класса, такими как:

public class Photo
{
    public function Photo(fileReference:FileReference)
    {
        this.fileReference = fileReference;
    }

    public var fileReference:FileReference;

    [Bindable("__NoChangeEvent__")] // __NoChangeEvent__ is a special name
    public function get name():String
    {
        return fileReference.name;
    }

    [Bindable("__NoChangeEvent__")]
    public function get data():*
    {
        return fileReference.data;
    }
}

Затем замените код:

var elem:Object = new Object;
elem.fr = FileReference(frList.fileList[i]);
elem.fr.load();
elem.fr.addEventListener(Event.COMPLETE,refreshThumb);
photos.addItem(elem);

со следующим:

var elem:Photo = new Photo(frList.fileList[i]);
elem.fileReference.addEventListener(Event.COMPLETE,refreshThumb);
elem.fileReference.load();
photos.addItem(elem);

Вы должны также изменить весь код, который использует photos collection соответственно.

...