Показать сообщение отдельно
Старый 07.06.2014, 19:44
2misha вне форума Посмотреть профиль Отправить личное сообщение для 2misha Найти все сообщения от 2misha
  № 1  
Ответить с цитированием
2misha

Регистрация: Apr 2014
Сообщений: 97
По умолчанию Ошибка с конвертацией Евентов

Вылазит ошибка [Fault] exception, information=TypeError: Error #1034: Type Coercion failed: cannot convert flash.events::Event@8e41061 to net.freedomstate.events.SendArrayEvent.

Хотя в функциях у меня тип события, что принимается, соответствует типу, что отправляется. Может я не учел какого-то нюанса работы событий? Посмотрите пожалуйста.

Код AS1/AS2:
package net.freedomstate.pages.registration
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import fl.controls.ComboBox;
	import flash.events.*;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import net.freedomstate.elements.Butt;
	import flash.display.Sprite;
	import net.freedomstate.elements.TextF;
	import net.freedomstate.events.SendArrayEvent;
 
	public class View extends Sprite 
	{
		private var _controller: Controller;
		private var _model: Model;
 
		private var _labelLogin: TextF;
		private var _labelPass: TextF;
		private var _labelInfo: TextF
		private var _inputLogin: TextF;
		private var _inputPass: TextF;
 
		private var _choiseCity: ComboBox;
 
		private var _butRegistr: Butt;
 
		public function View(): void
		{
			_model = new Model();
			_controller = new Controller(_model);
 
			_model.addEventListener(Event.ADDED, addCitiesList); 
			_model.addEventListener(Event.CHANGE, endRegistration)
 
			viewElements();
		}
 
		private function viewElements(): void
		{
			_labelLogin = new TextF(250, 350, "Логін");
			_labelPass = new TextF(250, 450, "Пароль");
			_labelInfo = new TextF(350, 275, _model.textInfo)
			_inputLogin = new TextF(450, 350, "", TextF.INPUT);
			_inputPass = new TextF(450, 450, "", TextF.INPUT);
			_inputPass.displayAsPassword = true;
 
			_choiseCity = new ComboBox();
			_choiseCity.width = 150;
			_choiseCity.height = 25;
			_choiseCity.x = 450;
			_choiseCity.y = 525;
 
			_butRegistr = new Butt(450, 600, "Зареєструватися");
			_butRegistr.addEventListener(MouseEvent.CLICK, butRegistrClick);
 
			addChild(_labelLogin);
			addChild(_labelPass);
			addChild(_labelInfo);
			addChild(_inputLogin);
			addChild(_inputPass);
			addChild(_choiseCity);
			addChild(_butRegistr);
		}
 
		private function butRegistrClick(e: Event): void
		{
			_controller.dispatchEvent(new SendArrayEvent(Event.ACTIVATE, new Array(_inputLogin.text, _inputPass.text, _choiseCity.selectedItem.label )));
		}
 
		private function addCitiesList(e: SendArrayEvent): void
		{
			for (var i: int = 0; i < _model.citiesArray.length; i++ )
			{
				_choiseCity.addItem( { label: _model.citiesArray[i] } );
			}
		}
 
		private function endRegistration(e: Event): void
		{
			_labelInfo.textColor = 0x00FF00;
			_labelInfo.text = _model.textInfo;
		}
	}
}
Код AS1/AS2:
package net.freedomstate.pages.registration
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import flash.events.*; 
	import flash.net.*;
	import net.freedomstate.events.SendArrayEvent;
 
	public class Controller extends EventDispatcher 
	{
		private var _model: Model;
 
		public function Controller(rModel: Model): void
		{
			_model = rModel;
 
			this.addEventListener(Event.ACTIVATE, registration);
		}
 
		private function registration(e: SendArrayEvent): void
		{
			var loader: URLLoader = new URLLoader;
 
			var v: URLVariables = new URLVariables();
			v.login = e.dataArray[0];
			v.pass = e.dataArray[1];
			v.city = e.dataArray[2];
 
			var req: URLRequest = new URLRequest(Main.REGISTRATION);
			req.method = URLRequestMethod.POST;
			req.data = v;
 
			loader.addEventListener(Event.COMPLETE, endRegistration);
			loader.load(req);
		}
 
		private function endRegistration(e: Event): void
		{
			var answer: String = e.currentTarget.data.toString();
 
			if(answer.indexOf("success") > -1)
			{
				_model.textInfo = "Ви зареєстровані!";
			}
			else
			{
				_model.textInfo = answer;
			}
 
			dispatchEvent(new Event(Event.CHANGE));
		}
	}
}
Код AS1/AS2:
package net.freedomstate.pages.registration
{
	/**
	 * ...
	 * @author Scorpion
	 */
 
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.*;
	import net.freedomstate.events.SendArrayEvent;
 
	public class Model extends EventDispatcher  
	{
		private var _textInfo: String;
		private var _citiesArray: Array = [  ];
 
		public function Model(): void
		{
			_textInfo = " "; 
 
			var loader: URLLoader = new URLLoader;
			loader.addEventListener(Event.COMPLETE, load);
			loader.load(new URLRequest(Main.LOADCITYES));
		}
 
		public function load(e: Event): void
		{
			var xmlList: XMLList = (XMLList(e.target.data)).city;
 
			for (var i: int = 0; i < xmlList.length(); i++ )
			{
				_citiesArray[i] = xmlList[i].title_city;
			}
 
			dispatchEvent(new SendArrayEvent(Event.ADDED, _citiesArray))
		}
 
		public function get textInfo(): String
		{
			return _textInfo;
		}
 
		public function get citiesArray(): Array
		{
			return _citiesArray;
		}
 
		public function set textInfo(string: String): void
		{
			_textInfo = string;
		}
	}
}
Страницу регистрации делаю.

Добавлено через 7 минут
Забыл добавить, что список городов из модели загружается нормально. Ошибка вылазит при нажатии на кнопки регистрации.