介绍
1.1关于
qooxdoo(发音['kuksdu:])是一种建立用户友好,界面表现丰富的应用系统的通用JavaScript框架,它可以让您在移动设备、传统的web应用、富客户端(RIA)应用程序甚至运行在浏览器之外进行设计开发。它完全利用面向对象编程技术,并且具有集成工具链来完成任何规模应用的开发和部署。qooxdoo是开放源代码的,基于LGPL和EPL双协议,也就是说它可以免费使用,无论您是个人使用还是商业应用。Qooxdoo由世界领先的web服务供应商1&1公司维护,它还有一个充满活力的社区。
1.1.1框架
Qooxdoo的核心是完全基于类,并充分利用了JavaScript面向对象的功能。它的命名空间功能使用户很方便的管理和组织自己的代码,且很容易与其他JS类库进行集成。它支持大多数现代浏览器(如Firefox, Internet Explorer, Opera, Safari, Chrome)。它本身集成的工具链不仅可以象Javadoc那样自动生成API文档,还允许快速完整对应用系统自动构建、优化、压缩、链接和部署。它的核心功能中包括了国际化和本地化功能,可以自动生成不同国家和语言的应用程序。
1.1.2 GUI工具包
尽管qooxdoo是一个纯JavaScript框架,但它与Qt或SWT GUI工具包一样,都提供了先进的但很容易使用的用户界面设计功能。它提供了一套很全面的widget,设计的系统与桌面应用程序很难区分。它内置键盘导航、焦点、Tab处理、拖动等常用功能。widget的尺寸可以设置为固定值,也可以自动调整,拉伸,甚至根据百分比,最小/最大值进行设置。所有widget都被强大而灵活的布局管理器管理。所有的管理工作都通过JavaScript接口定义进行控制,在使用和扩展这些接口时不需要HTML。qooxdoo开发人员甚至不需要知道CSS样式,因为它有一个清晰的,容易配置的样式、颜色、边框、字体和图标的成熟主题功能。
1.1.3 网络连接
Qooxdoo框架内置了很多种不同的网络连接功能,如最底层XMLHttpRequests(XHR)以及高级的RPC API。
1.2 功能概述
一个典型的应用系统是利用qooxdoo集成开发工具,在基于面向对象的JavaScript客户端编程模型上建立的。使用qooxdoo框架,可以使开发人员把精力完全集中在创建应用程序而不用担心底层的跨浏览器问题。
1.2.1 运行时
•qooxdoo支持很广泛的JavaScript环境:
•桌面浏览器(IE,Firefox,Opera,Safari,Chrome)
•移动浏览器(iOS,Android)
•browserless JS引擎(Node.js,Rhino等)
•无插件需要(不需要ActiveX, Java, Flash,Silverlight)
•没有修改本地JavaScript对象,以便易于与自定义代码集
1.2.2 面向对象
•qooxdoo框架是完全基于类
•通过名称空间来减少全局变量的使用
•除普通类外,它提供抽象类,静态类和单例类
•构造函数和析构函数
•可以在开发过程中来通过命名约定来强制定义公共,保护和私有成员
•单继承,多态性
•和Java的接口一样
•类Ruby的mixins功能
•被称为动态properties的功能,以非常方便和强大的方式来优化setter和getter方法。
1.2.3 编程
•纯客户端JavaScript
•不需要HTML知识
•不需要CSS知识
•不需要DOM知识
•完全支持基于事件的编程
•qooxdoo应用开发支持所有平台,如Windows, Linux, 所有的类Unix, Mac OS X
•所有的用户应用程序开发都是在预先配置好的框架基础上进行
•大量的示例程序和实例
•专为高性能设计
•辅助用户避免应用程序内存泄漏
•广泛的日志记录功能(例如不同的日志增加,Firebug 支持)
•简单调试
•浏览器历史记录管理,即浏览器后退/前进、书签按钮
•Cookies
•通用的漂亮的JavaScript代码风格、统一代码格式化程序
•由第三方提供的替代发展平台
1.2.4 国际化
•构建国际化(i18n)和本地化(i10n)的支持
•支持所有的语言和方言
•Unicode常见的现场数据仓库
•著名翻译文件格式(.po)
•支持所有平台上专业,免费翻译工具(“PO编辑器”)
1.2.5 API参考
•扩展了像javadoc的源代码注释
•为框架和自定义应用程序提供API参考
•在线和离线的API浏览
•搜索功能
1.2.6 测试
•集成单元测试框架- Test Runner
•集成功能测试框架模拟器
1.2.7 部署
•生成一个独立的、易于部署的“build”版
•复杂的生成过程隐藏在用户友好的命令之下
•JavaScript压缩(空格去除等)
•JavaScript类依赖自动分析;不需要人工的“require”的声明或定制一个用户绑定
•自动链接JavaScript类(“JS Linker”)
•在“build”时自动复制所需的静态资源如图像或其他外部文件
•字符串提取
•缩短和混淆局部变量或私有成员
•根据用户定义的变量来生成不同的版本,它允许不同的产品使用相同的代码
•去应用程序部署时去除调试语句
1.3 体系结构概述
下面的图表展示了qooxdoo的主要功能和它们是如何组织。请记住,这个图不包括qooxdoo的所有功能。你可以看到qooxdoo的四个主要方面,以有在什么场景下使用什么层。
1.4 入门
本节提供一些概念来帮助您为您的需求选择qooxdoo包,设置你的本地机器并开始编写自己的代码。
1.4.1 qx.Website
qx.Website是一个低级别的包,它的开发部署只依赖一个单一的JS文件,像你会的许多其他的JavaScript库一样。它包括DOM和BOM的抽象层,跨浏览器的事件处理,一个选择器引擎,和一个精简qooxdoo类系统版本。它不包含任何用户界面组件。如果你想在一个网页上操纵DOM元素,它是合适的。
qx.Website需求
通常在一个HTML页面包括qx.Website类库,然后利用它的API来编写您自己的代码。
浏览器需求
使用qx.Website的API编写的代码可以运行在所有主流Web浏览器上,特别是:
以上是浏览器的最低要求,经实验qx.Website并不能在所有浏览器上运行。
安装和设置
从qooxdoo网站的下载页面上下载qx.Website组件,在你的开发环境中将它放在一个合适的URI下。然后在你开发的页面中使用<script>标签包含这个URI。
<html> <head>
<script href="<uri_of_qx.Website_download>"/>
上面的代码就准备好了qx.Website开发所需的环境。
qooxdoo qx.Website入门
qx.website使用是很容易的。首先创建一个HTML网页和包含qx.Website库的<Script>标签,然后加入使用qx.Website API的代码就可以了。这里有一个简单的例子:
<html>
<head>
<script href="<uri_to_qx.Website_file>"/>
</head>
<body>
<div>Hello World! </div>
<script>
alert(q("div").getHtml());
</script>
</body>
</html>
1.4.2 qx.Desktop
qx.desktop包含了qooxdoo所有类和基础设施,如类系统,低级别的DOM/BOM层,一个主题系统,和一组丰富的用户界面组件和控件。你可以通过SDK,使用它创建类似桌面的,交互的Web应用程序。
qx.Desktop要求
由于使用qooxdoo建造的应用程序要运行在Web浏览器中,所以你至少需要一个支持qooxdoo的浏览器。开发时你需要从qooxdoo下载的SDK工具来创建你的应用程序框架(一旦系统进行了部署这些开发工具就不需要了)。
qooxdoo的跨浏览器特性不仅有益于您的应用程序的最终用户使用不同的浏览器进行工作,它也允许作为一个开发者的你来选择您熟悉的浏览器和操作系统来做为开发平台,而且所开发的系统将正确运行在所有支持的平台上。
qx.Desktop不强制使用任何特定的后端组件。任何服务器都可以通过它的I/O层来进行连接。在开发过程中,只要你的应用逻辑不执行服务器的连接,那么从文件系统加载你的应用程序就可以正常运行。开发者应该注意到,可以使用Chrome和Firefox等通过file:// 协议的形式来加载一些相当复杂的应用程序(如qooxdoo的apiviewer或demobrowser)。
浏览器需求
一个使用qooxdoo开发的桌面应用程序可以运行在几乎在所有现代主流Web浏览器上,用户不需要修改任何代码,且外观和感受基本相同:
qx.Desktop是qooxdoo的最重要的组成部分,也是我们重点学习的部分,后面我们还会重点对它进行更加详细的说明。
1.4.3 qx.Mobile
qx.Mobile 用来开发移动平台上的应用程序,如iOS和Android。它提供了适用于移动设备的特定的用户界面元素和主题功能。它可以像qx.Desktop通过SDK来进行设计开发。
qx.Mobile要求
qx.Mobile运行在iOS 2+、Android 1.6+、和Windows Mobile设备上,以及一个合适的手机浏览器上,或运行在您的台式PC机中的移动仿真器上。
1.4.4 qx.Server
qx.Servder是不提供DOM操作的环境库,如Node.js和Rhino。但你可以用它来开发webworkers。它不依赖外部API(如公共的窗口对象),但你可以使用它的基础功能,如classes,mixins,properties,自定义事件和数据绑定。
利用翻译软件并通过自己的理解做出以上文章,如有不妥,欢迎指正chshj@126.com