FineUI 官方论坛
标题:
实现关闭用户已经打开的标签!
[打印本页]
作者:
Vincent
时间:
2012-5-2 11:04
标题:
实现关闭用户已经打开的标签!
首先谢一下,亭长先生的提示!{:soso_e144:},先说一下我为什么要实现这一的效果,
因为我的项目左边的导航菜单式动态生成的,第一次进来的时候,加载满足条件的菜单,用户点击,然后相关标签在,右边的Main区域显示相关页面,然后用户点击搜索,左边菜单又不一样了,但是菜单里的每个选项是一样的,比如(man下面有tab1,tab2)因为之前第一次进来的时候,tab1,tab2用户已经打开了,如果现在再次点击的话,页面时不会有相应的,所以,只有在点击搜索的时候,就把用户上一次已经打开的标签都关闭掉。
好了原因说完,下面直接上代码,
var mainTabStrip = Ext.getCmp('<%= mainTabStrip.ClientID %>');
var tabID = 'dynamic_added_tab' + node.id.replace('__', '-');
tabIdLists
+=
tabID
+",";
document.getElementById("tabIdArry").setAttribute("value", "" +
tabIdLists
+ "");
mainTabStrip.addTab({
'id': tabID,
'url': href,
'title': node.parentNode.text + ' -> ' + node.text,
'closable': true,
'bodyStyle': 'padding:0;',
//'iconCls': 'icon_' + href.replace(/[^.]+\./, ''),
'tbar': new Ext.Toolbar({
items: ['->', openNewWindowButton, '-', refreshButton]
})
});
}这里是动态添加标签,并且给标签的Id赋值的,tabIdList是申明的一个var变量,把每次打开的tabId给tablists,然后在把tablists给隐藏域tabIdArry,这样我们在后台就能获得用户已经打开的标签的Id了
下面后台的就简单了
string tabs = tabIdArry.Text;
string [] tabIdArrys=tabs.Split(',');
foreach (var tabid in tabIdArrys)
{
PageContext.RegisterStartupScript(mainTabStrip.GetRemoveTabReference(tabid));
}
代码我就不分析了,大家都看得懂,
好了到此结束虽然不是什么鸟不起的分享,但毕竟是自己想办法解决的,所以想分享一下,望广大高手多多提意见。
作者:
张文相
时间:
2013-5-22 15:57
我可以发言么,给出客户端的实现 方式
作者:
张文相
时间:
2013-5-22 16:03
在DEAULT.JS中增加以下行
window.removeTab = function (id) {
mainTabStrip.removeTab(id);
};
window.removeOtherTabs = function (id) {
document.getElementById('tabIdArry').value.split(",").forEach(function (e) {
if (e != id)
mainTabStrip.removeTab(e);
});
在DEFAULT.ASPX中增加
<x:HiddenField ID="tabIdArry" runat="server">
</x:HiddenField>
同时增加全局变量
var tabIdLists = '';
当然,最关键的,还要用FINEUI的源码,修改X.UTIL.JS,按楼主所说的增加两行代码,然后重新执行JS.BAT,再重新编译后更新项目引用(注意清除浏览器的缓存,否则JS可能不会重新加载)
最后服务器端调用方式如下:
//PageContext.RegisterStartupScript("parent.removeTab('dynamic_added_tabfindDevice');");
PageContext.RegisterStartupScript("parent.removeOtherTabs('dynamic_added_tabfindDevice');");
客户端直接调用就不用说了吧
嗯,如果想让标签有编号,请在MENU.XML中为各节增加属性NodeID,如
<TreeNode NodeID="findDevice" Text="查找设备" NavigateUrl="~/deviceManager/findDevice.aspx">
</TreeNode>
<TreeNode NodeID="baseInfo" Text="基本信息" NavigateUrl="~/deviceManager/baseInfo.aspx" >
</TreeNode>
最后强烈建议 FINEUI将此功能增加到代码中去(目前它只增加了移除功能,对ID没有记录,不过记不记录都无所谓,即使不修改X.UTIL.JS,也一样可以直接去遍历所有可能打开的ID(即使它实际没有打开),然后发出关闭指令)
作者:
apoul
时间:
2013-5-24 15:20
看不懂是什么功能
作者:
Min
时间:
2013-5-24 16:14
语言 描述能力太差~! 鉴定完毕 ,而且点击 搜索 为什么左侧的菜单会没有呢? 搜索不应该刷新整个界面才是
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/)
Powered by Discuz! X3.4