|
本帖最后由 szjazz 于 2013-1-8 01:11 编辑
看了示例和Appbox源代码,有多处还继续使用script 脚本来设置某些控件的事件OnClientClick,比如:FineUI的示例首页中的下拉菜单中的”展开、折叠“
- <x:MenuButton ID="btnExpandAll" IconUrl="~/images/expand-all.gif" Text="展开菜单" EnablePostBack="false" runat="server">
- </x:MenuButton>
- <x:MenuButton ID="btnCollapseAll" IconUrl="~/images/collapse-all.gif" Text="折叠菜单"
- EnablePostBack="false" runat="server">
- </x:MenuButton>
复制代码- <script src="./js/default.js" type="text/javascript"></script>
复制代码- function onReady() {
- var btnExpandAll = Ext.getCmp(IDS.btnExpandAll);
- var btnCollapseAll = Ext.getCmp(IDS.btnCollapseAll);
- var mainMenu = Ext.getCmp(IDS.mainMenu);
- var mainTabStrip = Ext.getCmp(IDS.mainTabStrip);
- var windowSourceCode = Ext.getCmp(IDS.windowSourceCode);
- function getExpandedPanel() {
- var panel = null;
- mainMenu.items.each(function (item) {
- if (!item.collapsed) {
- panel = item;
- }
- });
- return panel;
- }
- // 点击全部展开按钮
- btnExpandAll.on('click', function () {
- if (IDS.menuType == "menu") {
- mainMenu.expandAll();
- } else {
- var expandedPanel = getExpandedPanel();
- if (expandedPanel) {
- expandedPanel.items.itemAt(0).expandAll();
- }
- }
- });
- // 点击全部折叠按钮
- btnCollapseAll.on('click', function () {
- if (IDS.menuType == "menu") {
- mainMenu.collapseAll();
- } else {
- var expandedPanel = getExpandedPanel();
- if (expandedPanel) {
- expandedPanel.items.itemAt(0).collapseAll();
- }
- }
- });
- function createToolbar() {
- // 由工具栏上按钮获得当前标签页中的iframe节点
- function getCurrentIframeNode(button) {
- // 注意:button.ownerCt 是工具栏,button.ownerCt.ownerCt 就是当前激活的标签页。
- return Ext.DomQuery.selectNode('iframe', button.ownerCt.ownerCt.el.dom);
- }
- // 动态创建按钮
- var sourcecodeButton = new Ext.Button({
- text: "源代码",
- type: "button",
- cls: "x-btn-text-icon",
- icon: "./res.axd?icon=PageWhiteCode",
- listeners: {
- click: function (button, e) {
- windowSourceCode.box_show('./source.aspx?files=' + getCurrentIframeNode(button).attributes['src'].value, '源代码');
- e.stopEvent();
- }
- }
- });
- var openNewWindowButton = new Ext.Button({
- text: '新标签页中打开',
- type: "button",
- cls: "x-btn-text-icon",
- icon: "./res.axd?icon=TabGo",
- listeners: {
- click: function (button, e) {
- window.open(getCurrentIframeNode(button).src, "_blank");
- e.stopEvent();
- }
- }
- });
- var refreshButton = new Ext.Button({
- text: '刷新',
- type: "button",
- cls: "x-btn-text-icon",
- icon: "./res.axd?icon=Reload",
- listeners: {
- click: function (button, e) {
- getCurrentIframeNode(button).contentWindow.location.reload(); //.replace(href);
- e.stopEvent();
- }
- }
- });
- return new Ext.Toolbar({
- items: ['->', sourcecodeButton, '-', refreshButton, '-', openNewWindowButton]
- });
- }
- // 初始化主框架中的树(或者Accordion+Tree)和选项卡互动,以及地址栏的更新
- X.util.initTreeTabStrip(mainMenu, mainTabStrip, createToolbar);
- // 公开添加示例标签页的方法
- window.addExampleTab = function (id, url, text, icon) {
- X.util.addMainTab(mainTabStrip, id, url, text, icon);
- };
- }
复制代码
甚至还有通过服务端来添加按钮的事件,比如Appbox的用户管理的新增按钮:
- <ext:Button ID="btnNew" runat="server" Icon="Add" EnablePostBack="false" Text="新增用户">
复制代码 而在页面初始化过程里,代码设置控件的客户端事件
- btnNew.OnClientClick = Window1.GetShowReference("~/admin/user_new.aspx", "新增用户");
复制代码
所有的这些,为什么不能直接用服务端的控件事件来呢,难道OnClick暂时还不能担当完成功能所需?
故而这些,有时看不明白代码或者说规划设计为什么要如此?,还请大师们、始祖们释疑!
|
|