Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Обращение к компоненту из as (http://www.flasher.ru/forum/showthread.php?t=169175)

sstotenkopf 29.09.2011 07:53

Обращение к компоненту из as
 
Доброе утро! Вообщем проблема такая: работаю во флеш билдере, есть mxml файл и as файл. В мхмл сделал поле для ввода текста с id="tf", в as написал класс, сделал функцию изменения его свойства .text, далее импортировал ас, главную функцию ас в мхмл, компилятор стал ругаться на обращение несуществующего свойства компонента tf.text (id компонента), как рассказать ему о существовании данного компонента? Как вы уже поняли я новичок и заранее извиняюсь за возможно глупый вопрос, просто пытался разобраться всю ночь перепробовал кучу способов и не один не помог... Заранее Спасибо!

Silicium 29.09.2011 15:44

Код можно?

trng 29.09.2011 20:11

Правильнее будет вместо своего класса написать свой компонент на основе TextArea/TextInput, в который встраивается нужная функциональность (изменение свойства .text, например).
И этот компонент использовать для создания поля ввода.

sstotenkopf 30.09.2011 00:52

Цитата:

Сообщение от Silicium (Сообщение 1035680)
Код можно?

Конечно)

мхмл vkc:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
                          applicationComplete="exch()">
 
        <fx:Script>               
                <![CDATA[
                        //applicationComplete="main(main)"
                        import main;
                        public function exch():void{
                                main();
                        }
 
 
                ]]>
        </fx:Script>
        <fx:Declarations>
                <!-- Разместить невизуальные элементы (например, службы или объекты значений) -->
        </fx:Declarations>
        <s:TextInput id="aLabel" x="164" y="152" height="167" width="336" text=""/>
 
 
 
</s:Application>

Файл АС:
Код AS3:

// ActionScript file
 
 
 
package
{
 
        import flash.display.Sprite;
        import flash.events.*;
        import vk.APIConnection;
        import vk.events.*;
        import vkc;
 
 
 
 
        public class main extends Sprite
        {
                public var api_id:Number;
                public var viewer_id:Number;
                public var sid:String;
                public var secret:String;
 
                public function main()
                {
                        // получаем flashVars
                        var flashVars:Object = stage.loaderInfo.parameters as Object;
                        // присваиваем переменным значения из flashVars
                        api_id = flashVars['api_id'];
                        viewer_id = flashVars['viewer_id'];
                        sid = flashVars['sid'];
                        secret = flashVars['secret'];
 
                        // для тестирования локально, вводим свои данные здесь и раскоменчиваем код
                        flashVars['api_id'] = ****;
                        flashVars['viewer_id'] = *****;
                        flashVars['sid'] = ******;
                        flashVars['secret'] = ******;
 
 
                        // инициализация
                        var VK:APIConnection = new APIConnection(flashVars);
                        // выполняем запрос getProfiles, в качестве параметра uids используем id пользователя, просматривающего приложения, в параметре fields указываем photo_big - большая фотография пользователя
                        VK.api('getProfiles', { uids: flashVars['viewer_id'],fields:'photo_big' }, onProfileLoaded, onError);
                }
 
                // данные получены
                private function onProfileLoaded(data: Object):void
                {
                        // обрабатываем полученный ответ
                        aLabel.text = data[0]['uid'] + ' ' + data[0]['first_name'] + ' ' + data[0]['last_name'] + ' ' + data[0]['photo_big'];
                }
 
                // если произошла ошибка
                private function onError(data: Object):void
                {
                        aLabel.text = data.error_msg;
                }
        }
}


Dimitry_II 30.09.2011 01:51

Код AS3:

<mx:Script source="yourPath/YourFile.as"/>


sstotenkopf 30.09.2011 02:29

Цитата:

Сообщение от Dimitry_II (Сообщение 1035807)
Код AS3:

<mx:Script source="yourPath/YourFile.as"/>


На сколько я знаю, include не дает возможность объявлять класс в ас файле, поэтому этот метод не подходит... Тем более я уже так пробовал)

GBee 30.09.2011 08:21

Вы хотите смерджить два примера?

вариант 1
Код AS3:

public function exch():void{
new main();
}

вариант 2
от Dimitry_II

но из main.as надо выкинуть все лишнее, чтобы он не был классом

Код AS3:

import flash.display.Sprite;
import flash.events.*;
import vk.APIConnection;
import vk.events.*;
import vkc;
 
public var api_id:Number;
public var viewer_id:Number;
public var sid:String;
public var secret:String;
 
public function main()
{
// получаем flashVars
var flashVars:Object = stage.loaderInfo.parameters as Object;
// присваиваем переменным значения из flashVars
api_id = flashVars['api_id'];
viewer_id = flashVars['viewer_id'];
sid = flashVars['sid'];
secret = flashVars['secret'];
 
// для тестирования локально, вводим свои данные здесь и раскоменчиваем код
flashVars['api_id'] = ****;
flashVars['viewer_id'] = *****;
flashVars['sid'] = ******;
flashVars['secret'] = ******;
 
 
// инициализация
var VK:APIConnection = new APIConnection(flashVars);
// выполняем запрос getProfiles, в качестве параметра uids используем id пользователя, просматривающего приложения, в параметре fields указываем photo_big - большая фотография пользователя
VK.api('getProfiles', { uids: flashVars['viewer_id'],fields:'photo_big' }, onProfileLoaded, onError);
}
 
// данные получены
private function onProfileLoaded(data: Object):void
{
// обрабатываем полученный ответ
aLabel.text = data[0]['uid'] + ' ' + data[0]['first_name'] + ' ' + data[0]['last_name'] + ' ' + data[0]['photo_big'];
}
 
// если произошла ошибка
private function onError(data: Object):void
{
aLabel.text = data.error_msg;
}


Silicium 30.09.2011 09:52

Верно. Если цель всех этих изощрений - отделить AS код от mxml - то класс не нужен, вариант GBee - самый самый. Если все-же нужен класс, то ни в коем случае не юзать внутри него прямые ссылки на объекты вне класса.
Код AS3:

aLabel.text = ...

- так делать очень плохо)

sstotenkopf 01.10.2011 01:05

Цитата:

Сообщение от Silicium (Сообщение 1035838)
Верно. Если цель всех этих изощрений - отделить AS код от mxml - то класс не нужен, вариант GBee - самый самый. Если все-же нужен класс, то ни в коем случае не юзать внутри него прямые ссылки на объекты вне класса.
Код AS3:

aLabel.text = ...

- так делать очень плохо)

А как же лучше поступить при условии использования класса, создать объект внутри него?

Добавлено через 23 минуты
Попробовал вариант без класса, ошибок компиляции нет, но текстовое поле не изменяет... Блин это жестко... во флеш я это сделал за 5 минут, тут же мучаюсь третий день

GBee 01.10.2011 12:12

А вы уверены, что доходит до изменения?

Silicium 02.10.2011 00:44

Цитата:

А как же лучше поступить при условии использования класса, создать объект внутри него?
Как вариант - передать ссылку. Еще лучше - использовать биндинг. Вообще много вариантов есть, но зачем создавать класс, который будет знать заранее, что у вас в коде есть вне его самого?..

Котяра 02.10.2011 12:28

Есть ещё Code Behind, когда as3 файл - является базовым для mxml - но опять же в классе надо будет явно описать визуальные компоненты (только как свойства класса) если они будут использованы в коде.
пример

Добавлено через 31 минуту
Ну и PS. А зачем здесь вообще флекс?


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

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