- 浏览: 234728 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
annyliyear:
找到的ExtJS实现多选下拉框3个代码 -
yinboxian:
源码太乱了
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
yinboxian:
我的peers第一次执行时可以得到正确的结果,以后就不行了。不 ...
JXTA中基于管道监听方式通信 -
cuizhenfu#gmail.com:
http://www.cnblogs.com/cuizhf
JXTA中使用JxtaServerPipe和JxtaBiDiPipe实现双向可靠的通信 -
luxing44530:
请问, jsp页面如果在 META-INF 中, 改怎么访问? ...
Servlet3.0 新特性之模块化实践
事前准备
本教程假设你已经安装好ExtJS库。安装的目录是extjs 并位于你程序的上一级目录。如果安装在其它地方你必须更改路径,更改示例文件中script标签的src的属性。
需要些什么?
除ExtJS库本身外,我们还需要两个文件:
- applayout.html
- applayout.js
先看看一份html文档,比较精简。并附有详细说明:
applayout.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="../extjs/resources/css/ext-all.css"> <script type="text/javascript" src="../extjs/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="../extjs/ext-all-debug.js"></script> <script type="text/javascript" src="applayout.js"></script> <!-- 本地化的脚本引用在这里 --> <script type="text/javascript"> Ext.onReady(myNameSpace.app.init, myNameSpace.app); </script> <title>Application Layout Tutorial</title> </head> <body> </body> </html>
开头的两行声明了文档的类型。程序可以不用doctype,但是这样的话浏览器可能默认其为Quirks怪僻类型,会导致处理跨浏览器这一问题上出现差异。
我们采用HTML 4.01 Transitional的文档类型,该类型在主流浏览器上支持得不错。当然,你也可以根据你的需求采用其它类型的doctype,但是记住别忘了要加上doctype。
更新: 不好意思,,其实呢 这个doctype了在IE底下呢,加了的话渲染时候会有点BUG,所以还是不建议加。~~我顶 我是这里的译者————真的不顶不可,老外怎么搞的啊
接着指定HTML头部的Content-Type。做这些事情其实很琐碎,但总是有益处。
然后引入EXT的样式,适配器和EXTJS本身。有两种版本的ExtJS:
- ext-all.js - 不能直接阅读,加载时更快,用于产品发布
- ext-all-debug.js - 便于阅读,开发阶段使用,
开发阶段的时候便需要引入debug的版本。
applayout.js这个文件就是我们的程序,紧跟着的是本地化的脚本,这里可以换成Extjs翻译好的版本
跟着我们开始分配事件句柄(event handler),使得在文档全部加载完毕后,程序就可以初始化(运行)。
下面的这一行:
Ext.onReady(myNameSpace.app.init, myNameSpace.app);
可这样说:当文档全部加载完毕,就运行myNameSpace.app的init方法,规定的作用域是myNameSpace.app。
然后是标题,头部的结尾,body(当前空)和结束标签。
applayout.js
/** * Application Layout * by Jozef Sakalos, aka Saki * http://extjs.com/learn/Tutorial:Application_Layout_for_Beginners_(Chinese) */ /** ------------------------------------------------ 中文用户请注意:applayout.js 这个文件应该在编辑生成文件的同时强行定义为UTF-8编码才可以通过. ------------------------------------------------ */ // 填充图片的本地引用 Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif'; // 创建命名空间 Ext.namespace('myNameSpace'); // 创建应用程序 myNameSpace.app = function() { // 元素还没创建,未能访问 // 私有变量 // 私有函数 // 公共空间 return { // 公共的属性,如,要转换的字符串 // 公共方法 init: function() { alert('应用程序初始化成功。'); } }; }(); // 程序底部 // 文件底部
文件最开始的几行是注释,说明该文件的主要内容、作者、作者相关的资讯。没有任何注释的程序也可以正常的运行,————但请记住:每次写的程序要容易给人看得懂的 Always write your application as if you would write it for another.当你回头看你几个月前写的代码,发现你根本不记得自己写过什么的时候,就会明白这个道理,并养成编码的好习惯。接着是要指向你服务器的填充图片,如不指定则默认extjs.com。每次运行程序的时候都访问extjs.com,不推荐这样,应该先修改这个常量值指向到本地。
现在自定义命名空间。将所有变量和方法都划分到一个全局对象下管理,这样的好处是避免了变量名冲突和由不同函数干扰了全局变量的值。名字(namespace)可按自己的方案选择。
整段代码的重点是,我们创建了 myNameSpace对象的属性app,其值是一个函数立刻运行之后的返回值。
如果运行我们的代码:
var o = function() { return {p1:11, p2:22}; }();
实际上我们创建了一个匿名函数(没有名字的函数),经过解释之后让它立刻运行(注意函数后面的())。最后将函数返回的对象(注意此时是一个object变量)分配到变量o。我们的程序便是这种思路去写的。
你可以把私有变量和私有函数直接定义在function和return这两个声明之间,但是请切记:此时不能访问任何html页面中的元素,那会导致错误,因为这段代码在加载时页面的head中就运行了,而这时候html页面中的其它元素还没有被加载进来。
另外一方面,函数init,是由匿名函数返回的对象的一个方法而已。它会在文档全部加载后才运行。换言之整个DOM树已经是可用的了。
一切都还好吧~如果能正确运行 http://yourserver.com/applayout/applayout.html ,不出现什么错误的话将弹出一个对话框。
接下来是利用这个空白的模板,讨论本文的重点。
公开Public、私有Private、特权的Privileged?
让我们程序变得更有意思。在页面applayout.html的body标签中加入:
<div id="btn1-ct"></div>
空白的div会当作按钮的容器来使用。然后在applayout.js加入下来代码:
/** * Application Layout * by Jozef Sakalos, aka Saki * http://extjs.com/learn/Tutorial:Application_Layout_for_Beginners_(Chinese) */ // 填充图片的本地引用 Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif'; // 允许这个指南同时在Ext2.0 和1.1 上同时工作 Ext.Ext2 = (Ext.version && (Ext.version.indexOf("2") == 0)); // 创建命名空间 Ext.namespace('myNameSpace'); // 创建应用程序 myNameSpace.app = function() { // 元素还没创建,未能访问 // 私有变量 var btn1; var privVar1 = 11; // 私有函数 var btn1Handler = function(button, event) { alert('privVar1=' + privVar1); alert('this.btn1Text=' + this.btn1Text); }; // 公共空间 return { // 公共的属性,如,要转译的字符串 btn1Text: 'Button 1', // 公共方法 init: function() { if (Ext.Ext2) { btn1 = new Ext.Button({ renderTo: 'btn1-ct', text: this.btn1Text, handler: btn1Handler }); } else { btn1 = new Ext.Button('btn1-ct', { text: this.btn1Text, handler: btn1Handler }); } } }; }(); //程序底部 // 文件底部
变量btn1 和privVar1 是私有的。 那意味着在程序外部他们是不能够被访问的,而且也不可见。私有函数btn1Handler也是同样道理。
另外一个方面,btn1Text是公共变量所以可以被程序外部访问或者是修改(我们稍后将会演示)。
函数init是特权的,即是私有变量和公共变量两者都可以被它访问到。在本例中,公共变量this.btn1Text和私有函数btn1Handler都能够被特权函数init所访问。同时,相对外界来说,它也属于公共成员的一种。
Ok,运行看看。能看到左上角的按钮吗?很好,点击它。得到一个privVar1=11的警告。这说明私有函数能访问私有变量。
但是,在第二个alert中,this.btn1Text却是undefined,表示是未定义的,这不是我们期望的结果。原因是在handler内的this变量指向的是button而不是我们的myNameSpace.app .增加scope属性来指明this为myNameSpace.app:
if (Ext.Ext2) { btn1 = new Ext.Button({ renderTo: 'btn1-ct', text: this.btn1Text, handler: btn1Handler, scope:this }); } else { btn1 = new Ext.Button('btn1-ct', { text: this.btn1Text, handler: btn1Handler, scope:this }); }
刷新一下,可以了吧?
重写公共变量
在applayout.js底部加入下列代码:
Ext.apply(myNameSpace.app, { btn1Text:'Taste 1' }); // 文件底部
这代码是用来干什么的呢?首先它创建了我们的程序对象然后改变(重写)公共变量btn1Text的值。运行后将看到按钮上文字的变化。
把文本都放到公共变量,以便于以后的国际化翻译工作,而不需要修改程序的内部代码。
当然你也可以将其它的值例如尺寸、样式、等等的总之是可自定义的选项都放到公共变量中。免于在数千行代码之中为查找某个颜色而费劲。
重写(Overriding)公共函数
接着更改一下代码,让它读起来是这样的:
Ext.apply(myNameSpace.app, { btn1Text:'Taste 1' , init: function() { try { btn1 = new Ext.Button('btn1-ct', { text: this.btn1Text , handler: btn1Handler , scope: this }); } catch(e) { alert('错误: "' + e.message + '" 发生在行: ' + e.lineNumber); } } }); // end of file
我们这里将init重写了一篇,主要是在原来代码的基础上加入异常控制,以便能够捕获异常。试运行一下看还有没有其它的变化?
嗯 是的,出现了btn1Handler 未定义的错误。这是因为新的函数虽然尝试访问私有变量但它实际是不允许的。正如所见,原init是特权函数可访问私有空间,但新的init却不能。之所以不能访问私有空间,是因为:禁止外部代码No code from outside,哪怕是尝试重写特权方法。
发表评论
-
自定义ListView背景
2012-10-23 09:06 0在Android中,ListView是最常用的一个控件,在做U ... -
TabPanel 加载多个 SWF 需要注意的问题。
2012-02-24 10:11 1330第1个问题,切换TabPanel的时候,有些Tab加载不到SW ... -
ExtJs中2个常用的高级事件功能:委托(Delegation),缓冲(Buffer)
2012-02-24 09:47 1359委托delegation 减低内存销毁和防止内存泄露的隐患是 ... -
ExtJs实现SearchGrid查询表格
2011-08-22 02:19 3473实现在表格头部下文可以有对应的查询框,如附件图。代码如下: ... -
ExtJs监听FormPanel的数据的更新情况
2011-08-21 18:17 3042最近项目提出一个新的需求: FormPanel面板当前 ... -
ExtJs中的CheckboxSelectionModel功能的完善
2011-08-17 23:44 5996所谓说要完善CheckboxSelectionModel功能, ... -
ExtJs实现刷新Grid单个单元格
2011-08-17 01:10 4766产生问题背景: ExtJS3.2版本 页面上存在定时刷新表 ... -
使用ExtJs开发项目总结
2011-08-09 00:38 17961、少用IFrame,或者不要 ... -
ExtJs TabPanel右键功能插件
2011-08-09 00:17 1942下面是ExtJs TabPanel右键功能插件,可以全部 ... -
ExtJs自定义带Form功能的Window
2011-08-08 23:58 3593之前在项目遇到一个问题就是使用很多的Window进行新增 ... -
Ext与RESTful Web Services(转载)
2011-04-19 23:29 1801REST与RESTful Web Services 表述性 ... -
如何本地化ext的教程(转载)
2011-04-19 23:28 1056引言 如果你是英语的用户就不必做任何本地化的工作了,这篇教程 ... -
教你创建Ext UI控件(转载)
2011-04-19 23:26 1396使用ExtJs创建新的UI控件 此文档介绍了怎么在ExtJS ... -
扩展Ext中的组件(转载)
2011-04-19 23:22 894引言 起初,Ext.extend()干的不错,它使你能够建 ... -
扩展Ext的新手教程(转载)
2011-04-19 23:12 1065一般你会希望使用类(class)来诠释面何对象的思想。本教程的 ... -
使用ExtJs如何框架一个大型网站?
2011-04-03 21:42 1602使用ExtJs开发项目问题: 1、如何管理大量的Js文件。 ... -
ddddddd
2011-01-16 15:24 0dddddd -
Ext.tree.panel中如何每次点击展开都从后台加载
2010-12-18 00:54 3711昨天为了项目需要在做异步加载树时,碰到一个每次点击节点都重新, ...
相关推荐
这本书分为三章,涵盖了Ext JS的关键概念和技术,旨在帮助开发者充分利用这个强大的JavaScript库来构建功能丰富的Web应用程序。 第一章可能涉及了Ext JS的基础和核心概念,包括MVC(Model-View-Controller)架构的...
EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,专为构建富互联网应用程序(RIA)设计。EXT提供了丰富的组件库,包括数据绑定、布局管理、拖放支持等功能,使得开发者能够创建出交互性强、用户体验良好的Web...
WebRunner.exe可能是这样的工具,它是一个小型的Web应用程序容器,可以加载和运行EXTJS应用,模拟Web环境。 config.ini配置文件在这个过程中起着关键作用。它可能包含了WebRunner的设置,比如EXTJS应用的URL、启动...
本教程“EXT.NET Web应用程序开发教程2012年英文版”是针对EXT.NET框架的一份详细学习资料,适合对.NET技术有一定基础,并希望深入学习EXT.NET的开发者。 教程内容可能涵盖以下几个方面: 1. **EXT.NET简介**:...
EXT是一个强大的JavaScript库,用于构建富客户端Web应用程序。这个入门程序是一个基于EXTJS的登录示例,它在不依赖数据库的情况下展示了用户登录的基本功能。EXTJS以其丰富的组件库、高度可定制的界面和优秀的用户...
《Ext JS高级程序设计》光盘源代码 今天才买的书,随书附带的光盘,压缩文件很大,所以分开压缩上传,一共有: Chapter3-《Ext JS高级程序设计》源代码.rar Chapter4-《Ext JS高级程序设计》源代码.rar Chapter5...
4、打开IE在地址栏输入“http://localhost:8088/FirstExt/HelloWorld.html”之后敲回车,如果一切正常,那么你会看到Ext 3.2版本的Hello world程序--它会一秒钟之后变背景色 阅读对象:希望使用新版本的Ext框架开发...
EXT,全称EXT JS,是一种基于JavaScript的开源前端框架,专为构建富互联网应用程序(Rich Internet Applications, RIA)设计。EXT提供了丰富的组件库,包括数据管理、用户界面控件和布局管理,使得开发者能够创建...
- **定义与特点**:Ext.NET是一个用于构建富互联网应用(RIA)的强大框架,它基于Microsoft .NET平台,利用了Ext JS JavaScript库的强大功能。Ext.NET使得开发者能够轻松地在服务器端通过.NET语言(如C#或VB.NET)...
《Ext JS高级程序设计》光盘源代码 今天才买的书,随书附带的光盘,压缩文件很大,所以分开压缩上传,一共有: Chapter3-《Ext JS高级程序设计》源代码.rar Chapter4-《Ext JS高级程序设计》源代码.rar Chapter5...
Ext 2.0是Sencha公司开发的一个JavaScript框架,用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,包括表格、树形视图、图表、菜单等,使得开发者能够创建功能强大、用户界面友好的Web应用。这个压缩包包含...
Ext简单论坛程序 Ext简单论坛程序 Ext简单论坛程序 Ext简单论坛程序
Ext JS 是一个强大的JavaScript库,专门用于构建富客户端应用程序。它提供了一套完整的组件模型,包括数据绑定,事件处理,布局管理,以及丰富的用户界面组件,使得开发者无需深入JavaScript底层细节,就能创建出...
5.2 DIY一个Ext.Direct实例 152 5.3 NewtonSoft.JSON 155 5.3.1 JSON的序列化和反序列化 155 5.3.2 LINQ to JSON 158 5.3.3 JSON文本的输出 162 5.4 本章小结 163 第6章 在Java中使用Ext.Direct 164 6.1 在Java平台...
1. **Ext**:ExtJS 是一个流行的JavaScript库,主要用于构建富客户端的Web应用程序。它提供了一套完整的组件模型,包括数据绑定和强大的用户界面元素,如表格、面板、图表等。在本主题中,Ext可能被用作开发桌面应用...
总的来说,集成CKEditor到Ext应用程序能提供一个功能完善的文本编辑解决方案。通过调整配置和利用CKEditor的API,你可以根据项目需求定制编辑器的功能,使其更好地服务于你的用户。同时,由于CKEditor的开源性质,...
Ext是一个强大的JavaScript库,专为构建富互联网应用程序(RIA)而设计,它提供了丰富的组件库,包括数据网格、图表、表格、窗体等,而图标则是这些组件的重要组成部分。 首先,Ext图标在UI设计中扮演着至关重要的...
综上所述,"ext grid tree 应用"展示了EXT JS在构建动态、交互式Web应用程序的强大能力,包括数据展示、数据管理、用户交互以及个性化设置等多个方面。通过学习和理解这些知识点,开发者可以更好地利用EXT JS创建...
这个标题提到的是一个使用EXT JS库创建的Web应用程序,它模仿了Windows操作系统的桌面界面。EXT JS是一个强大的JavaScript框架,专用于构建富客户端应用,其组件丰富,功能强大,可以实现复杂的用户界面设计。EXT JS...