вызвать функцию вне класса - PullRequest
0 голосов
/ 23 июля 2011

У меня есть этот кусок кода, который имеет проблему.так вы можете мне помочь?

package Classes
{
    import mx.controls.Button;

    public class Pages
    {
        public function Pages(){

        }

        public function LoginPage():void{
            AddButton('cmdLogin', 'Login');
        }

        private function AddButton(id:String, label:String, x:int, y:int, width:int, height:int):void {
            if (id.length > 0 && label.length > 0) {
            var button:Button = new Button();
            button.id = id;
            button.label = label;
            button.x = x;
            button.y = y;
            button.width = width;
            button.height = height;
            Main.addChild(button);
            }
        }
    }
}

Main.mxml

    <?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" creationComplete="main()">
        <fx:Script>
            <![CDATA[
                import Classes.Pages;

                private function main():void {
                    Pages.LoginPage();    // <---- HERE IS AN ERROR
//Description   Resource    Path    Location    Type
1061: Call to a possibly undefined method LoginPage through a reference with static type Class. Main.mxml   /File Hosting/src   line 30 Flex Problem

                }

            ]]>
        </fx:Script>
    </s:Application>

Ответы [ 2 ]

2 голосов
/ 23 июля 2011

Проблема в том, что вы не понимаете разницу между классами и экземплярами классов.Я рекомендую вам прочитать больше об ООП от основ.Даже если вы будете следовать советам @Lars Blåsjö, у вас будет проблема в строке:

Main.addChild(button);

, которая относится к классу Main, но не к экземпляру.А класс Main не имеет (статического) метода addChild().Так что это будет другая ошибка компилятора.Но ошибки компилятора не проблема.Вы легко их исправите.Проблема заключается в понимании и понимании ООП взаимодействия классов и экземпляров и принципов ООП и, как следствие, в отсутствии архитектуры, где весь код использует глобальные или статические значения или имеет высокую степень связи.

Поэтому, пожалуйста, прочитайте больше о ООПи шаблоны проектирования.Это может изменить ваше будущее:)

1 голос
/ 23 июля 2011

Если вы хотите вызвать метод для класса, а не создавать экземпляр этого класса и вызывать метод этого экземпляра, вам нужно объявить функцию как static.

Так что вы можетесделать это:

public static function LoginPage():void{
   AddButton('cmdLogin', 'Login');
}

...

Pages.LoginPage();

... или вы можете создать экземпляр Pages и вызвать метод для этого объекта, что можно считать нормальным случаем:

var pages:Pages = new Pages();
pages.LoginPage();
...