我有这段代码有问题。你能帮帮我吗?
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>
答案 0 :(得分:2)
问题是你没有意识到类和类实例之间的区别。我建议你从基础知识中阅读更多关于OOP的内容。因为即使你会遵循@LarsBlåsjö的建议,你也会遇到问题:
Main.addChild(button);
引用类Main
但不引用实例。类Main
没有(静态)方法addChild()
。所以这将是另一个编译器错误。但编译器错误不是问题。你可以轻松修复它们。问题在于OOP理解和理解类和实例的交互和OOP原则,因此缺乏所有代码都使用全局或静态或具有高耦合的体系结构。
所以请阅读有关OOP和设计模式的更多信息。它可以改变你的未来:)
答案 1 :(得分:1)
如果要在类上调用方法,而不是创建该类的实例并调用该实例的方法,则需要将该函数声明为static
。
所以你可以这样做:
public static function LoginPage():void{
AddButton('cmdLogin', 'Login');
}
...
Pages.LoginPage();
...或者您可以创建Pages的实例,并在该对象上调用该方法,这可以被认为是正常情况:
var pages:Pages = new Pages();
pages.LoginPage();