我有一个带有两个对象的flex应用程序:父小部件(称为IBaseWidget)和子小部件(称为HelperWidget2)。当用户单击帮助链接时,助手小部件被加载到基本小部件列表中,然后显示给用户。
但是,当我试图通过将集合中的基本小部件转换为子小部件类型来访问此子小部件时,子小部件返回null,并且我无法使用该小部件。
下面的代码片段正确地返回了新添加的小部件的小部件ID,并调度一个事件来加载小部件:
var id:Number = WidgetManager.getInstance().getWidgetId("Helper");
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, id, openQuickQueryCanvas));加载小部件后,名为openQuickQueryCanvas()的回调函数将尝试对辅助小部件执行另一个操作:
private function openQuickQueryCanvas():void{
var id:Number = WidgetManager.getInstance().getWidgetId("Helper");
var bWidget:IBaseWidget = WidgetManager.getInstance().getWidget(id) as IBaseWidget;
var helperWidget:HelperWidget2 = bWidget as HelperWidget2;
if(helperWidget != null){
helperWidget.quickQueryCanvas.dispatchEvent(new MouseEvent(MouseEvent.CLICK));//fire an event to open the quick query canvas
}
}问题是上面的helperWidget总是返回null,这意味着转换不成功。这对我来说没有任何意义,因为bWidget的类型是HelperWidget2。
有什么想法吗?我被难住了。
发布于 2011-03-02 06:04:19
首先,确保HelperWidget2像这样实现IBaseWidget
public class HelperWidget2 implements IBaseWidget其次,我建议使用is关键字,而不是强制转换和检查null:
private function openQuickQueryCanvas():void {
var id:Number = WidgetManager.getInstance().getWidgetId("Helper");
var bWidget:IBaseWidget = WidgetManager.getInstance().getWidget(id) as IBaseWidget;
if(bWidget is HelperWidget2)
{
HelperWidget2(bWidget).doWhatever();
}
}发布于 2012-10-03 04:49:21
将返回的实例强制转换为对象,而不是HelperWidget2。您在设计时不会拥有这些方法的智能感知,但更重要的是,它在运行时不会为空。
var bWidget:Object = WidgetManager.getInstance().getWidget(id);
bWidget.doWhatever();https://stackoverflow.com/questions/5159830
复制相似问题