FlexViewer中widget打开时关闭前一个打开的widget操作(widget的排他打开)
2011-08-10 17:31
288 查看
这两天一直在看FlexViewer的一些东东。FlexViewer的功能很强大,这一点无可厚非。但是对于widget,我们只能是打开之后手动的去关闭。我用了两天的时间(我是个编程菜鸟,花的时间就相对多了些)去实现了排他打开,只要你打开一个新的widget,就会自动关闭前一个打开的widget。实现过程如下:
1、对于widget的一些操作,FlexViewer(2.2)中主要是在widgetmanager中实现的。在widgetmanager的开始部分定义了一个 widgetTable(代码: private var widgetTable:Hashtable = new Hashtable();)。它会把每次你打开的widget都装在里面,但是不重复装。也就是你第二次开的时候,他会先检查widgetTable里面有没有你要打开的widget,如果有的话就把WidgetStates设为open。
2、于是我就想着每次打开一个widget之前,都把widgetTable遍历一遍,然后把WidgetStates设为close。
for(var i:Number=0;i<configData.widgets.length;i++)
// {
// if(widgetTable.find(i)&&i!=id)
// {
//// var widget:IBaseWidget = widgetTable.find(i) as IBaseWidget;
//// widget.setState(WidgetStates.WIDGET_CLOSED);
// }
// }
3、我运行了一下,欣喜的发现我很聪明,成功了!但是当我点击很多次之后,崩溃。widget会消失,但是widgetContainer并不会消失。哎,因此我纠结了两天啊!
4、今天下午同事帮忙终于解决。当我们打开一个widget的时候,就记住他的id,然后下次打开令一个的时侯,直接关闭上一个打开的widget。
private var closeIndex:Number=0;
if(closeIndex!=id){
var wdg_data:Object=
{
id:closeIndex,
state:WidgetStates.WIDGET_CLOSED
};
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_CHANGE_STATE,wdg_data));
closeIndex = id;
}
5、但是我不明白原来的为什么不行,性能问题吗?还是其他的原因?希望朋友给我提些建议。谁有flexViewer经验的希望分享啊!
1、对于widget的一些操作,FlexViewer(2.2)中主要是在widgetmanager中实现的。在widgetmanager的开始部分定义了一个 widgetTable(代码: private var widgetTable:Hashtable = new Hashtable();)。它会把每次你打开的widget都装在里面,但是不重复装。也就是你第二次开的时候,他会先检查widgetTable里面有没有你要打开的widget,如果有的话就把WidgetStates设为open。
2、于是我就想着每次打开一个widget之前,都把widgetTable遍历一遍,然后把WidgetStates设为close。
for(var i:Number=0;i<configData.widgets.length;i++)
// {
// if(widgetTable.find(i)&&i!=id)
// {
//// var widget:IBaseWidget = widgetTable.find(i) as IBaseWidget;
//// widget.setState(WidgetStates.WIDGET_CLOSED);
// }
// }
3、我运行了一下,欣喜的发现我很聪明,成功了!但是当我点击很多次之后,崩溃。widget会消失,但是widgetContainer并不会消失。哎,因此我纠结了两天啊!
4、今天下午同事帮忙终于解决。当我们打开一个widget的时候,就记住他的id,然后下次打开令一个的时侯,直接关闭上一个打开的widget。
private var closeIndex:Number=0;
if(closeIndex!=id){
var wdg_data:Object=
{
id:closeIndex,
state:WidgetStates.WIDGET_CLOSED
};
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_CHANGE_STATE,wdg_data));
closeIndex = id;
}
5、但是我不明白原来的为什么不行,性能问题吗?还是其他的原因?希望朋友给我提些建议。谁有flexViewer经验的希望分享啊!
相关文章推荐
- C# 关闭/打开显示器工具+源码(一个API的简单操作)
- C# 关闭/打开显示器工具+源码(一个API的简单操作)
- 打开.db的数据库时报错,显示不能在一个关闭的数据集上执行此操作
- 文件操作之增删改查3---文件的修改,f.replace(),在linux里的一些应用sed,with语句方法来打开一个或多个文件避免忘记关闭,python一行写的太长,怎么编写多行的规范
- Fileatream表示文件流,它能够打开和关闭文件,并对文件进行单字节的读写操作。 StreamReader和StreamWriter以文本方式对流进行读写操作。建立一个文本文件,分别使用上面两种方
- android学习:Activity简单操作---打开、关闭一个新的Activity
- 用keil2软件关闭,新建,打开一个工程的操作流程
- 知道一个文件名和位置如何对其进行打开/关闭操作
- Android程序打开和对输入法的操作(打开/关闭)
- C#实现一次只能打开一个客户端以及关闭自动重启的问题
- 企业管理器打开任意表都会有出错信息:对象关闭时,不允许操作。
- 文件打开关闭与读写等基本操作 C++
- C#操作Word(打开创建,选择复制,写入数据,保存关闭)
- Python文件操作 打开,读取,关闭
- 打开一个网页并弹窗提示,点击确定后2秒后关闭
- C#关闭一个窗口的同时打开另一个窗口
- python C++ Java 文件数据库等流操作,当打开后必须关闭
- 一个打开并创建文件操作引发的讨论
- 打开一个页面后,父页面DISABLE,在子页面关闭后,父页面ENABLE
- C语言文件操作 fopen, fclose, mkdir(打开关闭文件,建文件夹,判断文件是否存在可读或可写)