在折腾那么多以后,你可以看到一个漂亮的界面了,而且可以批量上传大文件。
三、代码分析
在代码分析前,我首先想和.NET程序员们分享一点编程体会。在.NET程序员入门的时候会被它控件拖曳方式打动,尤其是做一个WEB页面,拖拉机个控件就可以连接到数据库而且显示数据了,我也曾深深感动过。毕竟开发效率第一,老板喜欢这样的工作方式。但是当你深入WEB编程以后就会发现,做一个页面不难,做一个和客户友好交互的页面太难了,因为服务器控件缺乏丰富的客户端响应机制,你要控制一个控件的客户端行为都要在服务器端回写脚本送到客户端,真是隔靴搔痒啊。更麻烦的是你在回写脚本的时候渲染时机很难控制。 曾经我用服务器树控件写一个带菜单的树,结果写出来了,但是花了大量精力,而且效果并不理想,原因就在于“隔靴搔痒”的.NET页面机制。那么.NET就没有优势? .NET当然有其强大的优势,linq可以方便地操作数据库和xml、继承了windows的完整安全机制只须少量代码就可构建全面的安全体系、优美的C#编程艺术……这些都是.NET的巨大优势。我们如何扬长避短呢?选择一套优秀的UI框架结合.NET 后端优势这是一个不错的选择。如果你开发网站EXTCORE(仅仅几十K)+.NET是非常理想的,当然有的人喜欢JQUERY+. NET方式,也没什么问题,毕竟EXTCORE和JQUERY功能非常类似了。如果是开发内网系统EXTJS+.NET将是你最好的选择,强大的EXTUI将使你完成原来不敢想象的任务。
我不能指望这篇几页纸的文章能全面介绍..NET和EXTJS的编程技术,因为实际上几百页也无法达到这个目的,所以下面介绍的是代码中的重点部分。
1、 EXTJS的继承与扩展
在Default.aspx中可以看到JS代码:
var win = new Ext.Window({
…………
win.show();
很显然是在使用一个对象,这个对象是如何产生的呢?继承和扩展!
JS中没有真正的类,所以继承机制没有C#那样的OO,但也很天马行空。控件的代码全部在js目录下的SwfUpload-Ext.js文件中(后文的JS代码也全部在这个文件中):
UploadPanel.superclass.constructor.call(this, Ext.applyIf(config || {}, {
fileList: null,
swfupload: null,
progressBar: null,
progressInfo: null,
tbar: [{ id: 'divFileProgressContainer', xtype: 'box', height: 50}],
uploadInfoPanel: null, button_width: 160,
button_height: 22,
button_text: '',
button_text_style: '',
button_text_top_padding: 1,
button_text_left_padding: 5
}));
这就是一个构造函数。
Ext.extend(UploadPanel, Ext.Panel, {
…………..
这就是扩展了在我们的C#中可以叫继承吧(UploadPanel继承了Ext.Panel)。