`
xiaotian_ls
  • 浏览: 308182 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Cairngorm 中 AS版本的 Service 中注意的问题

    博客分类:
  • Flex
阅读更多
注意!本文所说的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
分享到:
评论

相关推荐

    Cairngorm例子

    这些事件通常是AS3中的类,继承自Flex的Event类,带有特定的类型和数据。 3. **ModelLocator**:这是一个全局访问点,用于存储和检索应用程序的数据模型。它提供了一个静态接口,使任何地方的组件都能获取或更新...

    flex 的cairngorm框架实例

    在Cairngorm中,有以下几个关键组件: 1. **Controller**:控制器是用户与应用程序之间的桥梁,负责接收事件并调用相应的业务逻辑。在本实例中,登录功能的实现将涉及一个Controller类,它监听用户的登录操作,并...

    Flex-cairngorm-demo我喜欢的

    在Cairngorm框架中,还有其他关键组件,如ServiceLocator用于服务的注册和查找,Command负责处理业务逻辑,Proxy作为模型和视图之间的中介,以及Store作为持久化数据的地方。这些组件共同构成了Cairngorm的完整生态...

    Cairngorm deepdive

    Cairngorm的第一个版本是在Flex出现之前为Flash开发的,当时主要包含Service Locator和服务辅助器(View Helper)。其中,服务辅助器主要用于管理Flash应用程序中的会话对象,而Service Locator则提供了一个单一入口...

    flex Cairngorm ,FABridgeDemo

    在此,我们主要探讨的是Flex中的Cairngorm框架以及FABridge库的使用,并通过一个名为FABridgeDemo的实例来深入理解这两个工具的结合应用。 Cairngorm是Adobe社区推出的一个轻量级MVC(Model-View-Controller)设计...

    在eclipse下使用Cairngen 1.2 构建cairngorm项目

    在"cairngen-sample"中,你可以看到诸如Main.mxml(主视图)、HelloWorldCommand.as(命令类)、HelloWorldEvent.as(事件类)等文件。通过查看和修改这些文件,你可以学习如何在Cairngorm框架中实现基本的用户交互...

    flex+cairngorm+Sqlite

    - **SQLite API**:在Flex中,我们可以使用AS3-SQLite库来访问SQLite数据库,实现CRUD操作。 - **数据绑定**:Flex支持数据绑定,可以将SQLite数据直接绑定到UI组件,简化开发过程。 - **事务处理**:SQLite支持...

    Cairngorm交互示例源文件(JSP后台)

    在本案例中,"Cairngorm交互示例源文件(JSP后台)"可能是一个包含使用Cairngorm框架构建的Flex应用,并与Java服务器端(JSP)进行交互的示例项目。 首先,让我们详细了解一下Cairngorm框架的关键组成部分: 1. **...

    CairngormDemo.zip

    在Cairngorm中,模型通常由事件驱动,当数据发生变化时,会触发相应的事件通知其他组件。 2. **视图(View)**:视图是用户界面的呈现,通常由Flex组件构成。视图监听模型的事件,并根据模型状态更新界面。 3. **...

    flex+Cairngorm+blazeds整合.doc

    在`cairngorm:ServiceLocator`中,我们配置了一个RemoteObject,ID为“system”,与我们在`remoting-config.xml`中定义的目的地相对应。设置`showBusyCursor`为“true”以显示忙碌指示器,同时定义了结果处理和错误...

    Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring) part4.pdf(完)

    该部分主要介绍了如何集成Cairngorm框架到项目中,并实现基于该框架的基本功能。Cairngorm是一种流行的Flex应用程序架构模式,它有助于开发者更好地组织代码、简化开发流程并提高应用的可维护性。以下是对文档标题、...

    cairngorm示例代码

    2. **Flex 3 Cookbook.pdf**:Flex 3是Cairngorm常结合使用的开发平台,这份Cookbook提供了大量解决常见问题的代码示例,能帮助开发者快速上手Flex应用开发,同时理解如何在Flex项目中集成Cairngorm。 通过阅读这些...

    Flex__as__面试题.doc

    在Flex开发中,ActionScript(AS)是主要的编程语言,而AS2和AS3是两个重要的版本。AS2与AS3的主要区别在于它们的基础架构和特性。AS2基于ActionScript Virtual Machine 1 (AVM1),而AS3则基于AVM2,后者提供了显著...

    flex as资料

    8. **实战案例**:通过具体的实例或项目,展示如何将Cairngorm扩展应用到实际开发中,解决特定问题。 通过对《Effectively Using Cairngorm Extensions》的深入学习,开发者不仅可以掌握Cairngorm框架的基本用法,...

    CairngormTest实例

    Cairngorm通过EventDispatcher、ServiceLocator、Command和Proxy等组件,进一步完善了这一模式。 CairngormTest中的文件很可能是包含以下组成部分: 1. **模型(Model)**:这部分可能包含ActionScript类,它们通常...

    Flex面试题.pdf

    Flex面试题涉及到多个方面,包括ActionScript(AS)版本差异、Flex开发框架、MVC模式的应用、内存管理、垃圾回收机制、前后端交互、性能优化以及Flex与Flash的协同开发等核心知识点。以下是对这些内容的详细解释: ...

    flex 面试题flex

    - 对于SWF体积大的问题,可以使用Module动态加载和RSL(Runtime Shared Libraries)共享库来减少下载量。 - 对于处理速度慢,可以优化异步通信,提升用户体验,例如通过进度条显示或异步加载。 8. Flash与Flex的...

    Flex MVC框架下载

    2. **Cairngorm**:Cairngorm是Adobe公司早期推出的MVC框架,也是AS3和Flex开发中广泛应用的一个框架。它以事件驱动为基础,结合了Service Locator、Singleton、Observer等设计模式,提供了Command、Event、Proxy、...

Global site tag (gtag.js) - Google Analytics