Actionscript 3 从getdefinitionbyname创建的另一个类寻址子类
我有一个类“pagecompiler”,它执行以下操作:Actionscript 3 从getdefinitionbyname创建的另一个类寻址子类,actionscript-3,Actionscript 3,我有一个类“pagecompiler”,它执行以下操作: if(page){ removeChild(page); } switch (appModel.currentPage){ case "Programma": case "Winkelwagen": case "Fi
if(page){
removeChild(page);
}
switch (appModel.currentPage){
case "Programma":
case "Winkelwagen":
case "Films":
case "Contact":
case "Reserveer":
var pageClass:* = getDefinitionByName("be.reynaertvincent.view.pages."+appModel.currentPage+"Page");
page = new pageClass();
addChild( page );
break;
}
contentBg = new ContentBg();
sidebarBg = new SidebarBg();
addChild(contentBg);
addChild(sidebarBg);
因此,它会根据开关创建一个页面,名称为(contactpage、filmspage、contactpage等)
每个页面都从一个名为“page”的类扩展而来
在“页面”类中,我执行以下操作:
if(page){
removeChild(page);
}
switch (appModel.currentPage){
case "Programma":
case "Winkelwagen":
case "Films":
case "Contact":
case "Reserveer":
var pageClass:* = getDefinitionByName("be.reynaertvincent.view.pages."+appModel.currentPage+"Page");
page = new pageClass();
addChild( page );
break;
}
contentBg = new ContentBg();
sidebarBg = new SidebarBg();
addChild(contentBg);
addChild(sidebarBg);
现在,当我在pagecompiler中执行以下操作时,我希望在contentBg上应用tween:
if(page){
removeChild(page);
}
但我似乎无法从那里解决contentBg。我试过:
if(page.contentBg){
tweenlite.to(page.contentBg,blablabla);
//removeChild(page);
}
但是它没有被识别。任何人有任何想法吗?在您的page类中,您可以创建一个公共方法:
public function removeFromStage():void
{
TweenLite.to ( contentBg , etc... {..... onComplete: remove})
}
//Called when the Tween is complete
private function remove():void
{
parent.removeChild( this );
//may come handy , don't forget to add a listener if you do this :)
dispatchEvent ( new Event ( Event.COMPLETE ) );
}
那么你可以这样称呼它
if(page != null ){
//add Complete event listener if necessary...
page.removeFromStage();
}
我发现你的代码有很多问题。如果您纠正了这些错误,您的问题应该得到解决:
Page
,而不是Page
。否则,您将有一个与类型同名的成员变量,并且可能会出现编译错误getDefinitionByName()
是一种代价高昂的实例化类的方法,因为它也不是类型安全的,所以您正在处理一个潜在的问题。既然您已经知道要实例化哪些类,为什么不将page
作为page
的实例,并扩展switch语句:
private var page:Page;
// some code here
switch (appModel.currentPage){
case "Programma":
page = new ProgrammaPage();
break;
case "Winkelwagen":
page = new WinkelwagenPage();
break;
case "Films":
page = new FilmsPage();
break;
case "Contact":
page = new ContactPage();
break;
case "Reserveer":
page = new ReserveerPage();
break;
}
addChild( page );
page
作为*
的实例,则需要强制转换到page
类才能访问其contentBg属性。大概是这样的:
tweenlite.to (Page(page).contentBg, ....);
但是,如果遵循前两个提示,应该已经解决了最后一点,因为编译器现在知道
page
属于page
类型。这也是上面提到的小写命名不起作用的一个很好的例子,因为page(page)。contentBg
显然是不明确的。非常好的观点:)不过我不鼓励将contentBg作为公共变量,似乎更好的做法是保护它,并在它被删除时简单地通知Page类处理它……这取决于Page类的其余部分。如果它只是一些显示对象的一个方便容器,而所有的逻辑都发生在其他地方,那么真的没有必要封装。哇,当我看到这样的答案时,我知道我有很多东西要学。尝试过这个,效果非常好。我不知道你可以编译这样的东西。只要提到所有阶级都是以上层阶级命名的。只是不习惯在flash builder之外输入。应该在示例代码中添加它。遗憾的是,我只能接受1个答案,因为这也是一个很好的解决方案。你以后会有用的,泰文