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

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

上一篇主要是扎扎实实地翻译了一下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=' + (new Date().getTime());
  }

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

?

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



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huoyanxueren/archive/2008/07/16/2662902.aspx