热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

enyo官方开发入门教程翻译一ConsumingWebServices

从本篇开始,不再按Enyo官方教程的顺序翻译,先翻译一些我还没有弄明白的部分---与服务器通信、触摸事件和与phonegap的集成。官方教程的顺序是布局

     从本篇开始,不再按Enyo官方教程的顺序翻译,先翻译一些我还没有弄明白的部分---与服务器通信、触摸事件和与phonegap的集成。官方教程的顺序是布局方法、通用UI的Control类的使用、主题、国际化、debug方法,然后才是现在翻译的这部分。

     在本文中,我们将看到基于Enyo框架的app如何使用传统的web通信方法和在特定情况下的WebService通信方法。

     在Enyo中,通过enyo.Ajax 或enyo.WebService 发送Web请求。enyo.Ajax直接继承自enyo.Async---处理异步操作的基类。enyo.WebService使用enyo.Ajax或enyo.JsonpRequest(enyo.Async的另一个子类)来完成HTTP通信。

     我们首先介绍核心的enyo.Async.

enyo.Async

    再次重申,enyo.Async是处理异步通信的基类。

     enyo.Async是一个Object而不是一个Component,所以你不能在components语句块中声名Async。如果你想把Async作为component组件来使用,那你应该使用enyo.WebService来代替。

     Async对象代表一个未完成的task。你可以为Async指定回调函数,当该task完成或抛出错误时就会调用该函数。

     要使用Async需要创建一个enyo.Async或它的子类的实例,然后再response或error方法中指定回调函数。

     调用go()方法来开始异步操作。

     处理程序可以是signature (asyncObject, value)方法或enyo.Async的实例或它的子类实例。这允许异步对象的链接。

     如果response方法返回一个值,这个值代替原值会发送到链中随后的处理程序。failure方法可以撤销错误的状态并切换到response方法。go()方法的默认实现方式会使所有response方法都被调用。

     下面的示例演示了前面讲到的许多特性:

1 var transaction = function() {
2 // Create a transaction object.
3 var async = new enyo.Async();
4 // Cause handlers to fire asynchronously (sometime after we yield this thread).
5 // "initial response" will be sent to handlers as inResponse
6 async.go("intial response");
7 // Until we yield the thread, we can continue to add handlers.
8 async.response(function(inSender, inResponse) {
9 console.log("first response: returning a string,",
10 "subsequent handlers receive this value for 'inResponse'");
11 return "some response";
12 });
13 return async;
14 };

     使用transaction方法可以为Async对象添加处理方法,直到所有的方法都返回(同步):

1 // Get a new transaction; it's been started, but we can add more handlers
2 // synchronously.
3 var x = transaction();
4
5 // Add a handler that will be called if an error is detected. This handler
6 // recovers and sends a custom message.
7 x.error(function(inSender, inResponse) {
8 console.log("error: calling recover", inResponse);
9 this.recover();
10 return "recovered message";
11 });
12
13 // Add a response handler that halts response handler and triggers the
14 // error chain. The error will be sent to the error handler registered
15 // above, which will restart the handler chain.
16 x.response(function(inSender, inResponse) {
17 console.log("response: calling fail");
18 this.fail(inResponse);
19 });
20
21 // Recovered message will end up here.
22 x.response(function(inSender, inResponse) {
23 console.log("response: ", inResponse);
24 });

enyo.Ajax

     enyo.Ajax继承了enyo.Async,对JS的XmlHttpRequest API进行了封装。

     enyo.Ajax公布了 enyo.AjaxProperties对象的所有属性。你可以为这些属性设置不同的值来定制自己的HTTP 请求,如url、回调方法、请求头等。

     和enyo.Async一样,enyo.Ajax也是一个Object不是Component,不要再components块中声明enyo.Ajax对象。如想把它作为component使用,请选择WebService来代替(WebService内部默认使用enyo.Ajax来完成HTTP通信)。

     下面是一个使用enyo.Ajax从Yahoo取回唯一id的例子:

1 getWoeid: function(inPlace) {
2 // set up enyo.AjaxProperties by sending them to the enyo.Ajax constructor
3 var x = new enyo.Ajax({url: "http://query.yahooapis.com/v1/public/yql?format=json"});
4 // send parameters the remote service using the 'go()' method
5 x.go({
6 q: 'select woeid from geo.placefinder where text="' + inPlace + '"'
7 });
8 // attach responders to the transaction object
9 x.response(this, function(inSender, inResponse) {
10 // extra information from response object
11 var woeid = inResponse.data.query.results.Result.woeid;
12 // do something with it
13 this.setWoeid(inPlace, woeid);
14 });
15 }

 

enyo.JsonpRequest

     enyo.JsonpRequest是使用JSONP请求远程服务器的一种特殊形式的enyo.Async。与普通的XmlHttpRequest不同,JsonP加载的是script。enyo.JsonpRequest经常用来跨域请求数据。你在使用WebService时将实例的jsonp设置为true就可以直接使用JSONP了,这时WebService内部使用enyo.JsonpRequest进行HTTP通信。

enyo.WebService

    enyo.WebService是执行XHR 请求的组件,它是Async和子类enyo.Ajax、enyo.JsonpRequest的包装类。它默认使用enyo.Ajax,并且和enyo.Ajax一样公布了enyo.AjaxProperties对象的所有属性。你可以给WebService实例设置不同的属性值来定制自己的HTTP请求。若要使WebService实例使用enyo.JsonpRequest,在实例中设置"jsonp: true"即可。

     使用send方法发送请求并返回Async的实例。返回的数据包含在onResponse或onError事件对象的data参数中。

enyo.Ajax vs. enyo.WebService

     你可能已经注意到,enyo.WebService和enyo.Ajax在功能上有很多重叠。一般,我们建议使用enyo.Ajax,因为它不用声明为component组件。

转:https://www.cnblogs.com/waimai/archive/2013/01/10/2853744.html



推荐阅读
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
  • 详细指南:使用IntelliJ IDEA构建多模块Maven项目
    本文在前两篇文章的基础上,进一步指导读者如何在IntelliJ IDEA中创建和配置多模块Maven项目。通过详细的步骤说明,帮助读者掌握项目模块化管理的方法。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • JavaScript:简洁与复杂之间的平衡
    本文探讨了在编写JavaScript教程时,如何在保持内容简洁的同时,确保初学者能够理解并应用实际开发中的复杂问题。文章通过具体示例分析了不同层次的JavaScript代码实现。 ... [详细]
  • 本文探讨了一个特定于 Spring 4.2.5 的问题,即在应用上下文刷新事件(ContextRefreshedEvent)触发时,带有 @Transactional 注解的 Bean 未能正确代理事务。该问题在 Spring 4.1.9 版本中正常运行,但在升级至 4.2.5 后出现异常。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 本文介绍了一个优化过的JavaScript函数,用于从API获取电影信息并渲染到网页上,同时注册Service Worker以提升用户体验和性能。 ... [详细]
  • 掌握Spring MVC中自定义类型转换与格式化的技巧
    近期,在开发一款小程序的过程中遇到了几个Spring MVC接口需要传递时间参数的问题。本文将详细介绍如何利用Java 8 Time API在Spring MVC中实现时间参数的自定义类型转换和格式化。 ... [详细]
author-avatar
巢i仔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有