深入Atlas 系列之客户端支持

时间:2010-03-12 18:20:55  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:分喜欢自己动手的开发人员来说,这甚至是他们仅仅需要的支持。        从这篇文章开始,我会从实现角度剖析Atlas对于Web Services的支持,希望能够帮助大家更深入地理解,更灵活地使用Atlas提供的这一功能。        在Atlas中,对于Web Services的访问,其实都是通过Sys.net.ServiceMethod类来实现的。我们先通过U...
  正文: Atlas提供了强大而灵活的服务器端Web Services访问能力。这对于客户端AJAX开发提供了绝好的条件,这几乎也是任何AJAX框架必备的功能。因为只要有了它,就能轻松地以AJAX方式与服务器端进行交互,而其他多样的页面操作自然可以由开发人员尽情开发。对于部分喜欢自己动手的开发人员来说,这甚至是他们仅仅需要的支持。
  
    从这篇文章开始,我会从实现角度剖析Atlas对于Web Services的支持,希望能够帮助大家更深入地理解,更灵活地使用Atlas提供的这一功能。
  
    在Atlas中,对于Web Services的访问,其实都是通过Sys.net.ServiceMethod类来实现的。我们先通过UML来看一下Sys.Net.ServiceMethod以及其其他一些类的关系。
  
  
  Sys.Net.WebMethod类是Sys.Net.ServiceMethod和Sys.Net.PageMethod的父类。后者用于访问写于页面中使用WebMethodAttribute标注的方法,不在这篇文章的讨论范围内。Sys.Net.WebMethod内定义了五个抽象函数:get_methodName、addHeaders、get_url、get_body和get_appUrl,其作用应该相当地显而易见。而继承Sys.Net.WebMethod的类,例如Sys.Net.ServiceMethod,则提供了这五个抽象函数的实现。
  
    Sys.Net.WebMethod类有一个非常有趣的函数“invoke”。从UML图中会发现,它居然提供了一个JavaScript中没有的功能:“函数重载(overload)”!至于它是如何实现,该如何使用,稍后将结合代码进行详细介绍。
  
    那么就进入代码分析阶段,先从Sys.Net.WebMethod的结构看起,从一个Atlas类的大致结构可以看出该类的成员定义和“构造函数”的实现。
  
    Sys.Net.WebMethod结构:
  
  1 Sys.Net.WebMethod = function() {
  2  //抽象成员定义
  3  this.addHeaders = Function.abstractMethod;
  4  this.get_appUrl = Function.abstractMethod;
  5  this.get_url = Function.abstractMethod;
  6  this.get_body = Function.abstractMethod;
  7
  8  //最后这个定义是我补上的,很明显代码里缺少了这个定义
  9  this.get_methodName = Function.abstractMethod;
  10
  11  this.invoke = function(params) {
  12   ……
  13  }
  14
  15  this._invoke = function(params, onMethodComplete, onMethodTimeout,
  16 onMethodError, onMethodAborted, userContext, timeoutInterval, priority, useGetMethod) {
  17
  18   ……
  19
  20   function onComplete(response, eventArgs) {
  21    ……
  22   }
  23
  24   function onTimeout(request, eventArgs) {
  25    ……
  26   }
  27
  28   function onAborted(request, eventArgs) {
  29    ……
  30   }
  31
  32   ……
  33  }
  34 }
  35 Sys.Net.WebMethod.reGISterAbstractClass('Sys.Net.WebMethod');
  
    可以见到五个抽象函数定义,在this._invoke函数是真正产生请求的地方,里面还有数个用于引发事件的方法。整个类的结构非常简单。
  
    接下来我们来仔细分析一下this.invoke函数。
  
    this.invoke函数分析
  
  1 // 参数params是一个Dictionary,用key - value的方式
  2 // 保存即将传递给Web Services的参数
  3 this.invoke = function(params) {
  4  var numOfParams = arguments.length;
  5
  6  // 如果有两个参数,并且第二个参数不是一个函数,
  7  // 则说明函数调用时参数是这样的:
  8  // this.invoke(params, settings);
  9  if (numOfParams == 2 && arguments[1] && typeof(arguments[1]) != 'function') { "深入Atlas 系列之客户端支持"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13217.html

 1/6    1 2 3 4 5 6 下一页 尾页


关键字:

关于《深入Atlas 系列之客户端支持》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td