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

来源:互联网 发布:广东历年相对湿度数据 编辑:程序博客网 时间:2024/05/01 07:10

 上一篇主要是扎扎实实地翻译了一下Ext.data.Connection的官文档。尽管网上有位大侠也搞了个中文文档,但是,有不少遗漏的地方。这篇主要是研究一下文档中有些语焉不详的地方,这些问题只能透过研究代码来解释了。

  一、Ext.data.Connection是否有依赖的模块

  有。它建立在一个适配器类:Ext.lib.Ajax的基础之上,有人看了Ext.js的代码,发现,Ext貌似没有什么底层适配器,事实上,是有的,Ext.lib.Ajax提供了对XMLHttpRequest对象的底层的封装(我直接用ext-base.js)。

  二、在options中哪些东西会被编码到url后面

  params、extraParams、form。

  三、url参数与jsonData、xmlData的关系

  这是个非常重大的问题,且见Connection的代码:

  if((method == 'GET' || o.xmlData || o.jsonData) && p){
    url += (url.indexOf('?') != -1 ? '&' : '?') + p;
    p = '';
  }

  看这三行代码,觉得实在讲不清啦。但是,至少一件事是明白的:如果定义了xmlData、jsonData,且又定义了params/extraParams/form,那么并不会造成参数无用。还是照样传过去了的。

  至于xmlData与jsonData的优先级关系,这个要看Ext.lib.Ajax的源码了。源码如下:

                if(options.xmlData){
                    if (!hs || !hs['Content-Type']){
                        this.initHeader('Content-Type', 'text/xml', false);
                    }
                    method = (method ? method : (options.method ? options.method : 'POST'));
                    data = options.xmlData;
                }else if(options.jsonData){
                    if (!hs || !hs['Content-Type']){
                        this.initHeader('Content-Type', 'application/json', false);
                    }
                    method = (method ? method : (options.method ? options.method : 'POST'));
                   data = typeof options.jsonData == 'object' ?Ext.encode(options.jsonData) : options.jsonData;
                }

  可见,如果同时定义了xmlData和jsonData,那么将按发送xmlData中的数据,jsonData中的数据被忽略。

  四、那个disableCaching倒底有什么鸟用?

  貌似是否使用缓存的意思?文档让人郁闷,且见代码:

  if(method == 'GET'&& (this.disableCaching && o.disableCaching !== false)|| o.disableCaching === true){
    url +=(url.indexOf('?') != -1 ? '&' :'?') + '_dc=' + (newDate().getTime());
  }

  原来是加个时间参数。拜托了。搞得我们一头的雾水啊。

 

  至此,关于Ext.data.Connection的相关问题都差不多扫清,它的使用例子,前面的“通信篇”中有代码。可以参见。