Создание ссылки на кнопки - Adobe flex - Blackberry Playbook

Может быть, простой вопрос, но у меня много проблем с тем, чтобы кнопка изменяла вид приложения Flex blackberry playbook. Я кодирую его полностью в ActionScript, без MXML.

myButton.addEventListener(MouseEvent.CLICK, doSomethingOnClick);

private function doSomethingOnClick(e:MouseEvent):void {
    navigator.pushView(view.Login, "testdata");
}

Когда я пробую это, я получаю:

1120: Доступ к неопределенному навигатору свойств.

Что странно, так как это работает в файле MXML. Как мне изменить представления в ActionScript?

Спасибо Фил

РЕДАКТИРОВАТЬ: Приветствуйте J_A_X, но теперь у меня есть:

navigator = new ViewNavigator();
navigator.pushView(net.airpoint.assessments.view.Login, " ");

TypeError: ошибка № 1009: невозможно получить доступ к свойству или методу ссылки на нулевой объект.

Приношу свои извинения, поскольку я понимаю, что это действительно простая вещь, но она просто не щелкает!

Обновление 2 * Assessments.as *

package
{
    import flash.display.Sprite;
    import flash.events.Event;

    import net.airpoint.assessments.view.*;

    import qnx.ui.core.Container;
    import qnx.ui.core.ContainerAlign;
    import qnx.ui.core.ContainerFlow;
    import qnx.ui.core.Containment;
    import qnx.ui.text.Label;

    import spark.components.ViewNavigator;

    [SWF(height="600", width="1024", frameRate="30", backgroundColor="#FFFFFF")]

    /* Main Layout */

    public class Assessments extends Sprite
    {
        //containers 
        private var main:Container;
        private var menu:Container
        private var firstLabel:Label;
        private var navigator:ViewNavigator;


        public function Assessments()
        {
            initializeUI();
        }

        private function initializeUI():void
        {
            main = new Container();
            main.padding = Vector.<Number>([20,20,20,20]);
            main.flow = ContainerFlow.HORIZONTAL;
            main.debugColor = 0xFFCC00;

            firstLabel = new Label();
            firstLabel.text = "First label";
            firstLabel.size=35;

            main.addChild(firstLabel);

            addChild(main);

            navigator = new ViewNavigator();
            navigator.pushView(Login, " ");

        }
    }
}

Login.as

package net.airpoint.assessments.view
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    import qnx.ui.buttons.Button;
    import qnx.ui.core.Container;
    import qnx.ui.text.Label;
    import qnx.ui.text.TextInput;

    import spark.components.View;

    public class Login extends View
    {

        private var usernameLabel:Label;
        public function Login()
        {
            initializeUI();
        }

        public function initializeUI():void
        {
            usernameLabel.text = "test";

            this.addChild(usernameLabel);
        }               
    }
}

person p_mcp    schedule 12.04.2011    source источник
comment
У тебя вообще навигатор добавлен? Здесь сказано, что вы этого не сделаете.   -  person J_A_X    schedule 12.04.2011
comment
О, Боже! ржу не могу. Поскольку он работал без создания экземпляра в MXML, я был впечатлен, это была своего рода языковая клавиатура. Однако теперь у меня есть: navigator = new ViewNavigator (); navigator.pushView (net.airpoint.assessments.view.Login,); и я получаю ...: TypeError: Ошибка № 1009: Невозможно получить доступ к свойству или методу ссылки на нулевой объект.   -  person p_mcp    schedule 12.04.2011
comment
Это чистый проект ActionScript? Поскольку компоненты Flex работают по-другому, поскольку проекты AS основаны на Sprite. Кроме того, вам не нужно добавлять полный путь, просто Login будет работать, пока он импортирован. И, наконец, вы хотите добавить ViewNavigator в список отображения, выполнив addElement(navigator).   -  person J_A_X    schedule 12.04.2011
comment
Да, это чистый проект ActionScript для блэкберри, так как они рекомендуют не использовать MXML. К сожалению, все еще не работает, я добавлю свой полный код в сообщение ... еще раз спасибо   -  person p_mcp    schedule 12.04.2011
comment
Я должен также сказать, что код является чисто тестовым, он мало чего делает, просто пытается разобраться с полными приложениями AS в FLex.   -  person p_mcp    schedule 12.04.2011
comment
Вы не можете использовать компоненты Flex в чистом проекте AS, не взломав его вместе, поэтому все, что начинается с пространства имен 'spark', недопустимо. Опять же, вы не можете добавить компонент Flex в Sprite, поэтому вы - SOL, если не используете MXML. Если вы собираетесь использовать компоненты Flex, можете также использовать MXML, это намного лучше, чем AS, когда дело доходит до макета вашего пользовательского интерфейса.   -  person J_A_X    schedule 12.04.2011
comment
Ах, извините, я запутался, проект представляет собой мобильный проект Flex, использующий только ActionScript, как рекомендует Blackberry против mxml ... Так что у меня все еще есть доступ к компонентам Spark и Flex, у меня нет ошибок компиляции   -  person p_mcp    schedule 12.04.2011


Ответы (2)


Что-то не так. Если это мобильный проект Flex, вам понадобится Application на верхнем уровне (вы знаете, например, как Flash Builder создал проект с помощью файла mxml). Либо вы создаете файл ActionScript, который расширяет приложение , как упомянуто здесь или вы просто используете файл mxml для корневого компонента.

Однако ваш аргумент «не использовать mxml» является избыточным, если вы используете компоненты Flex. Если вы используете компоненты Flex, вы используете mxml несмотря ни на что, поэтому повышения производительности не происходит. Во всяком случае, RIM рекомендует использовать AS только потому, что их SDK - это только AS (что в любом случае идиотично). Вы всегда можете добавить их компонент пользовательского интерфейса через AS в файлы mxml.

Так что на самом деле это спорный вопрос, и вам в любом случае следует просто использовать mxml, поскольку он лучше, чем обычный AS для разметки пользовательского интерфейса и скинов. Либо так, либо переходите на Pure AS без компонентов Flex.

person J_A_X    schedule 12.04.2011
comment
После всего этого, я думаю, я просто перейду на MXML, это намного проще и быстрее ... еще раз спасибо - person p_mcp; 12.04.2011

Я думаю, что использование Sprite в проекте ActionScript нормально.

Но если вы используете ActionScript вместо Flex только из-за компоненты QNX, затем вы можете переключить свой проект на Flex и следовать этим инструкциям, чтобы использовать компоненты QNX в нем: Использование qnx.ui.picker.Picker в мобильном проекте Flex Hero для Blackberry Playbook

person Alexander Farber    schedule 13.04.2011