日期:2014-05-16  浏览次数:20438 次

extJs 2.1 学习笔记(Ext.data.HttpProxy篇)

? 关于Ext.data中各个类的关系图我在前面已经做了一个,不用多言。其实啊。关于数据的显示,一般要经历三个流程:DataProxy-->DataReader-->Store。当然,三个部分都得是具体的类,这三个是抽象类。
  如果按照一般性的理解,那么应当先从Proxy开始了。

  出人意料:DataProxy的代码就是一空架子。且看:

Ext.data.DataProxy = function(){
??? this.addEvents(
??????? 'beforeload',
??????? 'load'
??? );
??? Ext.data.DataProxy.superclass.constructor.call(this);
};

Ext.extend(Ext.data.DataProxy, Ext.util.Observable);

  就是加两事件,从Observable继承了。如此而己,看代码就看晴晰了。再看一看HttpProxy,它的代码也就一百来行。比起其他类来说,真是小巫见大巫了。

  先为Ext.data.HttpProxy给个描述吧:从一个Ext.data.Connection中读取数据到一个数据对象、从Ext.data.DataProxy继承的类。这个类不能跨站出数据,记住了。

  此类构函数的文档中说:

  HttpProxy( Object conn )

  conn是一个connection对象或者是一个传给Ext.Ajax.request的options。如果传给它的是一个options,那么,将使用Ext.Ajax.request获取数据。

  这个地方要注意一下。

  下面来讲一下load函数,HttpProxy的一切精髓皆在于此。HttpProxy唯一的一个公开的函数。

load( Object params, Ext.data.DataReader reader, Function callback, Object scope, Object arg ) : void

从一个配置好的Ext.data.Connection中读取数据,它通过传递过来的实现自Ext.data.DataReader的对象来读取数据放到一个Ext.data.Records中。并且,在callback中处理这个结果数据。

参数:
  params : Object
  用于Ext.data.connection.request的options中的params。

  reader : Ext.data.DataReader
  被用来转化数据的。把数据转化成Ext.data.Records的形式。

  callback : Function
??? 用于处理最终结果的回调,当HttpProxy取得connection中的数据,然后交给reader转化了数据后,所得结果集就会交给callback。它的参数如下:
     object result
     一个记录集对象。

     object arg
     就是load函数中传过来的arg。

     boolean success
     是否请求数据成功。

  scope : Object
  用于callback的scope。

  arg : Object
  用于callback的arg。
  

  本来看文档没看出明堂来,一结合代码就明白了。原来callback就是用来处理数据的。如果正常的话,这个callback应当是由 store来提供吧。它实现这个接口,然后把数据从HttpProxy中接手过来。然后就后就得包装成store了。这还只是我的猜测,具体情况就要看 store的代码了。

  现在,一切都明显了,取数据是connection的事,不用我们费心了,转换数据成记录集,这个是reader的事,也不用我们费心了。HttpProxy的作用事实就是二者的外观类。现在就要研究一下Ext.data.JsonReader了。