`

转载:《Ext.ns》

阅读更多
转载自:http://hi.baidu.com/zhangjinbo619/blog/item/bbd7aed5bddbbbca51da4b83.html
声明:本人转载只为分享,如涉及商业版权纠纷,请及时与本人联系,必将立即删除,造成不便,还望见谅,谢谢。


在软件架构中,特别是B/S架构中,很流行使用三层架构(数据层、中间层、表现层)来建立软件。但这从来都是服务器端的专利。在传统的概念中,客户端的职责就只是用来对数据进行展现而已。如果说客户端也搞三层,确实是一样不可思议的事件。

为什么要搞客户端三层?

ExtJS这个框架是个功能很强大的框架,由于它给了开发者很大的自由度跟细粒度。开发者在开发的过程中,配置、使用一个组件需要编写许多的代码。工 作量大不说,效率低,可重用性低却是致命的。所以,聪明的开发者,应该积极利用ExtJS里的面向对象功能,简化自己的工作。定制自己的组件。才能提高自 己的效率。所以,除了在服务器端也搞三层,我们也可以在客户端搞三层,定制组件,简化工作。

基本知识

Ext.ns()(或Ext.namespace()函数)。相信很少有人去使用这个函数,这个函数用以构建一个新的命名空间。概念跟C#的命名空间 或Java中的包概念一样。观察源代码我们可以发现。实际上这个函数只是建立了一个跟命名空间一样的类而已。比 如:Ext.ns('buzz.data.utility');,就会新建一个类,名称是buzz.data.utility。有了这个概念,我们就好办 了。

实例函数与静态函数,这两种函数的区别我就不讲了,主要讲讲如何在JS中实现。用例子说明或许会比较直观。

1 Ext.ns('test.cls');
2 test.cls = function() {
3
4 }
5 test.cls.staticShow = function() {
6     alert('这是静态函数');
7 }
8
9 test.cls.prototype.instanceShow = function() {
10     alert('这是实例函数');
11 }
调用如下:
1 var temp = new test.cls();
2 temp.instanceShow()
3 test.cls.staticShow()
数据访问层
1 Ext.ns('buzz.data.utility');
2 buzz.data.utility.buildHttpStroe = function() {
3     return new Ext.data.Store({
4         proxy: new Ext.data.HttpProxy()
5     });
6 }
该层用于返回一个进行基本封装的Store对象。
中间层
1 Ext.ns('buzz.user);
2 buzz.user = Ext.data.Record.create([
3     { name: 'PersonName', mapping: 'name', type: 'string' },
4     { name: 'PersonID', mapping: 'id', type: 'int' }
5 ]); //数据模型,对应服务器端的数据模型
6
7 buzz.user.load = function(url, loadedCallback) {
8     var st = buzz.data.utility.buildHttpStroe();
9     st.proxy.getConnection().url = url;
10     st.reader = new Ext.data.JsonReader({ root: 'data' }, buzz.user);
11     st.on('load', loadedCallback);
12     st.load();
13 }  //静态方法,用以从服务器端返回数据,返回类型为buzz.user类型,参数url是要调用数据的地址,loadedCallback是回调函数
中间层部分,我们新建了一个buzz.user类(命名空间),该类直接创建自Record对象,该对象是定制的,与服务器端数据模型对应的。注意使用mapping进行映射。而buzz.user.load方法是一个静态方法。不需要实例化即可使用。
表现层部分
1 Ext.onReady(function() {
2     Ext.get('btn1').on('click', function() {
3         buzz.user.load('json1.ashx', callback);
4     });
5 });
6
7 function callback(st, res, op) {
8     for (var i = 0; i < res.length;  i++) {
9         alert(String.format('{0},{1}', res[i].get('PersonID'), res[i].get('PersonName')));
10     }
11 }
12
回调函数三个参数,st:store对象;res:Record数组;op:其它附加选项该篇文章只作抛砖引玉的作用。实际开发中,还需要更多考虑的地方。
分享到:
评论

相关推荐

    ExtJS-3.4.0系列:Ext.TabPanel

    在本文中,我们将深入探讨ExtJS中的`Ext.TabPanel`组件,它是创建多标签界面的核心元素。`Ext.TabPanel`允许开发者在单个容器中组织多个面板或视图,每个面板都有自己的标题,并且可以通过标签页进行切换。让我们...

    Ext.data.Store的基本用法

    ### Ext.data.Store的基本用法详解 #### 一、Ext.data.Store简介 `Ext.data.Store`是ExtJS框架中用于管理数据的核心组件之一。它主要负责数据的存储、加载、更新等操作,并且提供了多种方法来方便地处理这些数据。...

    JMeterPlugins.jar

    JMeter导入jmx运行脚本时出现这样的错误jmeter.save.SaveService: Conversion error .../lib/ext ==&gt; JMeterPlugins.jar

    org.restlet.ext.servlet-2.1.1.jar

    org.restlet.ext.servlet-2.1.1.jar

    EXT.form组件

    EXT.form组件是EXT JS库中用于构建表单界面的核心组件集合。这些组件提供了一系列丰富的控件,用于创建具有不同功能的交互式表单。在EXT JS中,表单组件不仅包含基本的输入字段,还支持复杂的输入类型和验证机制。 ...

    org.restlet.ext.servlet

    看名字,有需要下jar包

    Ext.get与Ext.fly的区别

    ### Ext.get与Ext.fly的区别 在Ext JS框架中,`Ext.get`和`Ext.fly`是两个非常重要的方法,它们主要用于操作DOM元素。理解这两个方法之间的区别以及如何使用它们对于开发高质量、高效率的应用程序至关重要。 #### ...

    深入浅出Ext.JS.徐会生例子

    Ext.JS是一个强大的JavaScript库,专门用于构建富客户端Web应用程序。它提供了丰富的用户界面组件、数据绑定机制和可扩展的架构,使得开发人员能够创建功能复杂的桌面级网页应用。"深入浅出Ext.JS.徐会生例子"可能是...

    Ext.DataView 图片列表显示

    var reader = new Ext.data.JsonReader({totalProperty:'totalProperty',root:'root'},record); store = new Ext.data.Store({ proxy:proxy, reader:reader }); //尾 分页 var pagebar = new Ext....

    extjs中Ext.Panel和TreePanel 组件动态加载本地页面数据

    在EXTJS这个强大的JavaScript框架中,`Ext.Panel`和`TreePanel`是两个非常重要的组件,它们被广泛用于构建复杂的用户界面。这篇文章将探讨如何在这些组件中动态加载本地页面数据,以提升用户体验并实现灵活的数据...

    一个简单的Ext.Window中插入图片的例子

    在Ext JS这个强大的JavaScript框架中,`Ext.Window`是一个常用组件,用于创建浮动、可弹出的窗口。在Web应用程序中,我们常常需要在这些窗口中展示各种内容,包括文字、表格、按钮,当然还有图片。本文将详细介绍...

    EXT dojochina Ext注册.rar

    5. **EXT.js与Dojo Toolkit的对比**:如果针对两者的学习者,文件可能讨论了它们的区别,以及在何时选择EXT.js。 6. **社区资源链接**:可能包含Dojo China论坛、API文档、问答社区等在线资源的链接,以便进一步...

    extjs-Ext.ux.form.LovCombo下拉框

    在EXTJS框架中,`Ext.ux.form.LovCombo`是一种自定义组件,它扩展了基本的`Ext.form.field.ComboBox`,提供了更丰富的功能,尤其是针对多选和联动选择的需求。这个组件通常用于创建具有“lov”(即“Look Up Value”...

    Ext.tree.TreeLoader附带封装的json类

    在本文中,我们将深入探讨`Ext.tree.TreeLoader`与JSON数据在Ext JS框架中的应用。`Ext.tree.TreeLoader`是Ext JS库中的一个组件,它负责加载和解析树形结构的数据,而JSON(JavaScript Object Notation)则是一种轻...

    Ext.Array例子

    在EXTJS库中,`Ext.Array` 是一个非常重要的工具类,它提供了许多方便的静态方法,用于处理JavaScript中的数组。这些方法旨在增强原生数组的功能,提高代码的可读性和效率。`Ext.Array` 包含了排序、查找、过滤、...

    Ext.JS.4.First.Look_第1版__._Ext.JS.4.First.Look_.Loiane.Groner.文字版

    ### Ext.JS 4.0 第一印象:新特性与迁移指南 #### 一、书籍简介 本书《Ext.JS 4.0 第一印象》由 Loiane Groner 撰写,是一本针对 Ext.JS 4.0 的实用指南。书中详细介绍了 Ext.JS 4.0 的新特性,并提供了从 Ext.JS ...

    Ext.js教程和Ext.js API

    Ext.js 是一个强大的JavaScript库,专门用于构建富客户端的Web应用程序。它提供了丰富的用户界面组件和数据绑定功能,使得开发者可以构建出具有桌面应用级别的交互式网页应用。本教程和API文档聚焦于Ext.js 3.0版本...

    Ext.Ajax.request2.x实现同步请求

    在EXTJS库中,`Ext.Ajax.request`是用于发送Ajax请求的核心方法,它支持异步和同步操作。本文将详细解析如何利用`Ext.Ajax.request`实现同步请求,并探讨其背后的原理和注意事项。 首先,我们需要理解Ajax的本质,...

    EXT dojochina文本框示例Ext.form.TextField.rar

    在本示例中,"EXT dojochina文本框示例Ext.form.TextField.rar"是一个压缩包,包含了EXT框架中关于`Ext.form.TextField`组件的示例代码。 `Ext.form.TextField`是EXT框架中的一个核心组件,用于创建基本的输入字段...

    Ext.ux.SwfUploadPanel.js

    `Ext.ux.SwfUploadPanel.js`是这样一个基于ExtJS和SwfUpload技术的插件,它实现了多文件上传的功能。这篇文章将深入探讨这个插件的工作原理、主要特点以及如何在实际项目中应用。 首先,`ExtJS`(全称为EXT ...

Global site tag (gtag.js) - Google Analytics