FineUI 官方论坛
标题:
不明之处,为什么多处用客户端事件,也不提供服务端方法
[打印本页]
作者:
szjazz
时间:
2013-1-8 01:07
标题:
不明之处,为什么多处用客户端事件,也不提供服务端方法
本帖最后由 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暂时还不能担当完成功能所需?
故而这些,有时看不明白代码或者说规划设计为什么要如此?,还请大师们、始祖们释疑!
作者:
swtseaman
时间:
2013-1-8 01:23
这个我个人理解很简单,FineUI的确做的非常不错,绝大多数功能,如你说的这些客户端执行的功能服务端不是不可以完成,但三石这样做的目的(把代码写在客户端),就是为了尽量减少服务端压力,减少客户端和服务端的交互次数,所以尽可能的让能在客户端完成的事情都交给客户端。项目做多自然会明白这样做的好处了!
欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/)
Powered by Discuz! X3.4