注意!本文所说的cairgorm版本是2.2.1
Cairngorm 中的 service 在一些教程中看到的都是用MXML版本:
<?xml version="1.0" encoding="utf-8"?>
<cairngorm:ServiceLocator
xmlns:cairngorm="com.adobe.cairngorm.business.*"
xmlns:mx="http://www.adobe.com/2006/mxml">
<!-- Login Service -->
<mx:RemoteObject
id="ls"
showBusyCursor="true"
endpoint="http://localhost/amfphp/gateway.php"
destination="From amfPHP"
source="MyClass.User"
>
<mx:method name="login" />
</mx:RemoteObject>
<!-- 其它服务 -->
</cairngorm:ServiceLocator>
如果要写成actionscript版本呢?很明显只要是一个继承ServiceLocator的子类就行了,然后在主程序里定义一个。
package business
{
import com.adobe.cairngorm.business.ServiceLocator;
import mx.rpc.remoting.mxml.RemoteObject;//注意这里是引用MXML包里的RemoteObject
//绑定
[Bindable]
public class LoginServiceAs extends ServiceLocator
{
public var loginRO:RemoteObject;
public function LoginServiceAs(){
initROs();
super();
}
private function initROs():void{
loginRO=new RemoteObject("登陆");
loginRO.endpoint="http://localhost/amfphp/gateway.php";
loginRO.source="MyClass.User";
loginRO.showBusyCursor=true;
//loginRO.login.makeObjectsBindable();
}
}
}
如果不是MXML包里的RemoteObject 的话会提示: Cannot assign operations into an RPC Service
如果类不可绑定提示找不到operation错误中包含这个路径: C:\dev\swat\projects\ac_emea\ 这个问题我google了下,在某个国外的邮件列表上看到一个关于这个的讨论,某人从2.1升级到2.2出现了这个错误,后来发现要加个[Bindable]在扩展的ServiceLocator上。但最终没有讨论出原因。我查了下源代码:2.1到2.2版本很多地方做了重构,2.1时 ServiceLocator中的几个service对象容器是Array:
private var services : Array;
private var httpServices : Array;
private var messageAgents : Array;
private var dataServices : Array;
而2.2.1中:
private var _httpServices : HTTPServices;
private var _remoteObjects : RemoteObjects;
private var _webServices : WebServices;
其中2.1版中的services的push动作相关代码是:
if ( services == null )
{
services = new Array();
var accessors : XMLList = getAccessors();
for ( var i : uint = 0; i < accessors.length(); i++ )
{
var name : String = accessors[ i ];
var obj : Object = this[ name ];
if ( obj is AbstractService )
{
services.push( obj );
}
}
}
return services;
在这里,AbstractService 指的是 mx.rpc.AbstractService
而在2.2.1中: HTTPServices ,RemoteObjects ,WebServices三个类型都继承于新定义的类 com.adobe.cairngorm.business.CaiAbstractServices 这是一个简单的类实现了com.adobe.cairngorm.business.IServices接口
HTTPServices ,RemoteObjects ,WebServices三个类则用一个 Dictionary类型的成员来保存service
这样两者就有所区别了,2.1 中所有services都被包含在ServiceLocator里的Array里,而2.2中的services则被分门别类保存在三个普通的自定义类对象里面的Dictionary对象里面,之所以要绑定的原因,我想就是在这里吧!(有空再验证下这个推论...)
track:http://blog.csdn.net/Iptton/archive/2008/05/14/2444316.aspx
分享到:
相关推荐
这些事件通常是AS3中的类,继承自Flex的Event类,带有特定的类型和数据。 3. **ModelLocator**:这是一个全局访问点,用于存储和检索应用程序的数据模型。它提供了一个静态接口,使任何地方的组件都能获取或更新...
在Cairngorm中,有以下几个关键组件: 1. **Controller**:控制器是用户与应用程序之间的桥梁,负责接收事件并调用相应的业务逻辑。在本实例中,登录功能的实现将涉及一个Controller类,它监听用户的登录操作,并...
在Cairngorm框架中,还有其他关键组件,如ServiceLocator用于服务的注册和查找,Command负责处理业务逻辑,Proxy作为模型和视图之间的中介,以及Store作为持久化数据的地方。这些组件共同构成了Cairngorm的完整生态...
Cairngorm的第一个版本是在Flex出现之前为Flash开发的,当时主要包含Service Locator和服务辅助器(View Helper)。其中,服务辅助器主要用于管理Flash应用程序中的会话对象,而Service Locator则提供了一个单一入口...
在此,我们主要探讨的是Flex中的Cairngorm框架以及FABridge库的使用,并通过一个名为FABridgeDemo的实例来深入理解这两个工具的结合应用。 Cairngorm是Adobe社区推出的一个轻量级MVC(Model-View-Controller)设计...
在"cairngen-sample"中,你可以看到诸如Main.mxml(主视图)、HelloWorldCommand.as(命令类)、HelloWorldEvent.as(事件类)等文件。通过查看和修改这些文件,你可以学习如何在Cairngorm框架中实现基本的用户交互...
- **SQLite API**:在Flex中,我们可以使用AS3-SQLite库来访问SQLite数据库,实现CRUD操作。 - **数据绑定**:Flex支持数据绑定,可以将SQLite数据直接绑定到UI组件,简化开发过程。 - **事务处理**:SQLite支持...
在本案例中,"Cairngorm交互示例源文件(JSP后台)"可能是一个包含使用Cairngorm框架构建的Flex应用,并与Java服务器端(JSP)进行交互的示例项目。 首先,让我们详细了解一下Cairngorm框架的关键组成部分: 1. **...
在Cairngorm中,模型通常由事件驱动,当数据发生变化时,会触发相应的事件通知其他组件。 2. **视图(View)**:视图是用户界面的呈现,通常由Flex组件构成。视图监听模型的事件,并根据模型状态更新界面。 3. **...
在`cairngorm:ServiceLocator`中,我们配置了一个RemoteObject,ID为“system”,与我们在`remoting-config.xml`中定义的目的地相对应。设置`showBusyCursor`为“true”以显示忙碌指示器,同时定义了结果处理和错误...
该部分主要介绍了如何集成Cairngorm框架到项目中,并实现基于该框架的基本功能。Cairngorm是一种流行的Flex应用程序架构模式,它有助于开发者更好地组织代码、简化开发流程并提高应用的可维护性。以下是对文档标题、...
2. **Flex 3 Cookbook.pdf**:Flex 3是Cairngorm常结合使用的开发平台,这份Cookbook提供了大量解决常见问题的代码示例,能帮助开发者快速上手Flex应用开发,同时理解如何在Flex项目中集成Cairngorm。 通过阅读这些...
在Flex开发中,ActionScript(AS)是主要的编程语言,而AS2和AS3是两个重要的版本。AS2与AS3的主要区别在于它们的基础架构和特性。AS2基于ActionScript Virtual Machine 1 (AVM1),而AS3则基于AVM2,后者提供了显著...
8. **实战案例**:通过具体的实例或项目,展示如何将Cairngorm扩展应用到实际开发中,解决特定问题。 通过对《Effectively Using Cairngorm Extensions》的深入学习,开发者不仅可以掌握Cairngorm框架的基本用法,...
Cairngorm通过EventDispatcher、ServiceLocator、Command和Proxy等组件,进一步完善了这一模式。 CairngormTest中的文件很可能是包含以下组成部分: 1. **模型(Model)**:这部分可能包含ActionScript类,它们通常...
Flex面试题涉及到多个方面,包括ActionScript(AS)版本差异、Flex开发框架、MVC模式的应用、内存管理、垃圾回收机制、前后端交互、性能优化以及Flex与Flash的协同开发等核心知识点。以下是对这些内容的详细解释: ...
- 对于SWF体积大的问题,可以使用Module动态加载和RSL(Runtime Shared Libraries)共享库来减少下载量。 - 对于处理速度慢,可以优化异步通信,提升用户体验,例如通过进度条显示或异步加载。 8. Flash与Flex的...
2. **Cairngorm**:Cairngorm是Adobe公司早期推出的MVC框架,也是AS3和Flex开发中广泛应用的一个框架。它以事件驱动为基础,结合了Service Locator、Singleton、Observer等设计模式,提供了Command、Event、Proxy、...