Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Flex + AS3 + MVC (http://www.flasher.ru/forum/showthread.php?t=151550)

Unit81 01.03.2011 15:35

Flex + AS3 + MVC
 
Всем привет.
У меня такой вопрос - как ПРАВИЛЬНО связывать mxml и as-код?

Решил порабоать с Flex, создал в FlexBuilder проект. В визуальном редакторе накидал компонентов, затем в mxml в теге
Код AS3:

<mx:Script>

написал несколько функций - в некоторых идет работа с компонентами (например изменение бэкграунда).
И вот, количество строк кода приблизилось к 300 и задался я вопросом - "а как отделить as-код от mxml?"

Вариант 1: Директива
Код AS3:

#include

- в as3 не рекомендуется;

Вариант 2:
Код AS3:

<mx:Script source="myscript.as">

- простой перенос функций в as-файл - все работает, НО - этот as не проверяется средой на ошибки и я не могу просматривать свойства компонентов созданных в mxml.

Вариант 3: Создать as-класс, импортировать его в mxml, затем создать объект и работать с методами созданного объекта. Проблема - придется передавать ссылки на каждый компонент из mxlm в as-класс.

Какие еще варианты возможны?

zorexundra 01.03.2011 16:24

Цитата:

Сообщение от Unit81 (Сообщение 977251)
Вариант 1: Директива
Код AS3:

#include

- в as3 не рекомендуется;

Не то, чтобы не рекомендуется, но заменено на директиву include.
В среде Flash Builder 4 такая связь отслеживается. Работает подсветка методов и свойств mxml-объектов. По крайней мере тех, которые расположены в mxml-файле с данной директивой.

Unit81 01.03.2011 16:31

Хм... надо поковырять этот вариант =) Спасибо!

alatar 01.03.2011 17:01

http://www.flasher.ru/forum/showpost...42&postcount=4

Unit81 01.03.2011 17:29

Цитата:

Сообщение от alatar (Сообщение 977272)

Пробовал вчера нечто подобное (пытался отнаследовать as от mxml) но чета не получилось (поздо было, спать хотел :) ).
Надо еще раз попробовать...

И еще такой нюанс - создаю именно flex-проект, в котором изначально есть только один mxml-файл, а тут говорится о базовом as-классе

Цитата:

Способ 1. Создается базовый as класс (например MyComponentBase.as), который наследуется от класса, который вы бы использовали как базовый для mxml-компонента. mxml-компонент (MyComponent.mxml), в свою очередь, создается на базе MyComponent.as. В mxml-компоненте расставляются необходимые контролы. Все контролы, которые используются в коде, должны иметь id. В базовом классе (MyComponentBase.as) для этих контролов создаются публичные переменные соответсвующего типа. Весь код пишется в myComponentBase.as.
Это значит, что проект должен быть AS? Или я чего-то не понял?

alatar 01.03.2011 17:34

Цитата:

пытался отнаследовать as от mxml
Внимательнее читайте и все получится. Надо не as наследовать от mxml, а mxml наследовать от as.

Unit81 01.03.2011 17:48

Цитата:

Сообщение от alatar (Сообщение 977284)
Внимательнее читайте и все получится. Надо не as наследовать от mxml, а mxml наследовать от as.

Не, Вашу мысль я понял (пытался-то я вчера :) ) ну и соответственно сейчас пытаюсь ее спроецировать на свою ситуацию...

Цитата:

И еще такой нюанс - создаю именно flex-проект, в котором изначально есть только один mxml-файл, а тут говорится о базовом as-классе

Цитата:

Способ 1. Создается базовый as класс (например MyComponentBase.as), который наследуется от класса, который вы бы использовали как базовый для mxml-компонента. mxml-компонент (MyComponent.mxml), в свою очередь, создается на базе MyComponent.as. В mxml-компоненте расставляются необходимые контролы. Все контролы, которые используются в коде, должны иметь id. В базовом классе (MyComponentBase.as) для этих контролов создаются публичные переменные соответсвующего типа. Весь код пишется в myComponentBase.as.
Это значит, что проект должен быть AS?

Johny_86 01.03.2011 18:04

Пример использования: я по нему разобрался и сделал свою прогу уже как надо:
1. Создаём флекс-проект, называем его: FlexCodeBehind.
2. В папке src создаем папку app.
3. В папке app (это будет пакет наш) создаём файл MyClass, который будет наслед. от application, чтобы потом mxml наследовался от этого нашего MyClass.
в итоге у тебя 2 файла: FlexCodeBehind.mxml и MyClass.as

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<app:MyClass
        xmlns:app="app.*"
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="absolute"
        initialize="myButtonClick(event)">
        <mx:Button x="262" y="228" label="Button"
        click="myButtonClick(event)"/>
 
</app:MyClass>

Код AS3:

// ActionScript file
package app {
 
        import flash.events.MouseEvent;
        import mx.controls.Alert;
        import mx.core.Application;
        import flash.events.Event;
 
        public class MyClass extends Application {
 
 
 
                public function myButtonClick(e:Event):void {
                        Alert.show("Hello from button click in code behind");
                }
        }
}

Если у тебя в mxml есть кнопка допустим с id="btn", то тебе в AS-файле нужно завести public var btn:Button. тогда ты сможешь управлять из AS-кода.

Добавлено через 1 минуту
В этом коде Алерт появляется при инициализации, а так же по клику мышки.

Unit81 01.03.2011 18:10

О, класс, как-раз этого не хватало, наглядно-просто-понятно :) Спасибо!


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

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