我有一个“pagecompiler”类,它会执行以下操作:
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;
}
所以根据开关创建页面,名称是(联系页面,电影页面,联系页面等)
这些页面中的每一页都从一个名为“page”的类扩展。
在“页面”课程中,我执行以下操作:
contentBg = new ContentBg();
sidebarBg = new SidebarBg();
addChild(contentBg);
addChild(sidebarBg);
现在我想在pagecompiler中执行以下操作时在contentBg上应用补间:
if(page){
removeChild(page);
}
但我似乎无法从那里找到contentBg。我试过了:
if(page.contentBg){
tweenlite.to(page.contentBg,blablabla);
//removeChild(page);
}
但它没有得到认可。有没有任何人?
答案 0 :(得分:2)
我发现您的代码存在许多问题。如果你纠正它们,你的问题应该得到解决:
您应该坚持使用命名约定:类名称应以大写字母开头。所以它应该是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
显然是模棱两可的。
答案 1 :(得分:0)
在您的网页课程中,您可以创建一个公共方法:
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();
}