`
hay
  • 浏览: 13043 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

flex的pureMVC+Fabrication的使用例子--HelloWorld

    博客分类:
  • Flex
阅读更多

我还是新手哈,有很多地方可能写的不好,不要见怪。

 第一步:

1. 创建我们的Flex4Web项目,需要导入的lib如下图所示

 

 

2. 看看我们该如何构建Fabrication下的flex项目,以及弄清楚各个层的作用和关系,简单的可以看看下面的图

 



 

3. 首先我们应该明白的是基于pureMVCFabrication框架下的原理是如何运作的,看看下面的该项目的运作流程图:

 

 

 

 

 

 

 

 

 

 

第二:

其中需要说明一下的是,FabricationreactToTestButton1$Click(evt:Event)方法的命名原因:

1. reactTo开头是响应View层那些组件的事件的绑定的规则

2. TestButton1component包下的HelloWorldGroup.mxml的按钮ID,可看源代码如图所示:

 



  

3. Click是指绑定该组件(这里是Button)的点击事件,只要是Event都可以绑定,后面那个美元符号$就是间隔区分的。可以看看工具中显示的那些组件有什么事件类型:

 

这里的都可以绑定写成相关的方法,例如我要改成是测试消息2按钮的双击的事件响应,命名规范则是:

reactToTestButton2$DoubleClick

特别要注意的就是大小写的规范和方法的属性都是public的。

 

第三:就是响应消息的机制是如何处理的解释。

消息响应有两种方式,

第一种方式例如该项目中的方式,就是通过namespace命名空间的方式响应。

1. 首先看看我们命名空间中是如何定义代码的:

package flex.helloworld.notifications

{

    public namespace message2 = "message2";

}

很简单o(_)o 哈哈。这里是说我们定义一个我们将要用到的消息变量。

2. Mediator里面响应发过来的消息:

message2 function processNotification(note:INotification):void {

            helloWorldProxy.createMessage(note.getBody() as String);

        }

处理不同的消息,唯一要改的就是message2这个命名空间,写该方法的时候,在mediator里面必须导入message2那个命名空间的包,看代码:

import flex.helloworld.notifications.message2;

好了。function processNotification(note:INotification)这些都是一样的,现在例如我们要接受message1的消息,那个接受消息的方法要怎么写,相信你已经会了。

如下所示:

message1 function processNotification(note:INotification):void {

            helloWorldProxy.createMessage(note.getBody() as String);

        }

是的,就这样第一种接受消息的方式处理完了。

 

现在说一下第二种方式响应相关的消息的解释:

第二种方式也是跟命名方式有关的,我们在Mediator里面接收消息message1的方法如下:

public function respondToMessage1():void {

            //。。。。。

        }

其中respondTo也是固定不变的,后面接着的就是定义好消息常量:

Public static const MESSAGE1 = “message1”;

是跟字符串message1相匹配的。但是这种方式还要定义一个消息常量类,把那些消息常量定义进去,具体的就不说了,可以去Fabricationgoogle上的官网是什么样的,有很多例子,下一个看看就知道了。我就只说我们用到的方式。

 

看看我们运行的程序吧:

 



 

点击以后,得到响应:在下面现实消息内容:

 



 

对了,我们发消息时在同一个模块内发消息是通过sendNotification()这个API的。

如果在不同的模块发消息,例如要从这个模块的flash文件模块发送到外部的另一个flash模块,则用到的是routeNotification()这个API具体的参数请自己查阅啦。

 

好了基于pureMVCFabrication框架其中一个方式的使用介绍就说完了。

 

  • 大小: 6.8 KB
  • 大小: 41.2 KB
  • 大小: 51.2 KB
  • 大小: 84.2 KB
  • 大小: 27.2 KB
  • 大小: 24.8 KB
  • 大小: 13 KB
  • 大小: 17.4 KB
分享到:
评论
3 楼 hay 2011-02-09  
flex_莫冲 写道
你好。关于这个例子,我有个问题想请教你。如果应用程序中有两个状态。默认状态是login。如下
</fx:Script>
<fab:states>
<s:State name="login"/>
<s:State name="main"/>
</fab:states>
    <s:Button click="this.currentState='main'" includeIn="login"/>
    <view:HelloWorldGroup id="helloWorldGroup" includeIn="main"/>
这样的话,在HelloWorldModuleMediator.as中的
public function get helloWorldGroup():HelloWorldGroup {
            return helloWorld.helloWorldGroup as HelloWorldGroup ;
        }
helloWorldGroup还是null。这样就会报错了。这个问题要怎么解决呢。希望你见到能给我答复。非常感谢。


当有两个状态的视图组件,属于动态绑定了。。 你获取动态渲染的组件对象不能直接这样写,他的官网有一个例子http://code.google.com/p/fabrication/wiki/ReflexiveMediatorRegistration

registerMediator(new ButtonStyleMediator(
   resolve(application).re("button[0-9]+")
));

你的父级Mediator最好也弄成动态组件对象渲染,这样就可以了
2 楼 flex_莫冲 2011-02-01  
你好。关于这个例子,我有个问题想请教你。如果应用程序中有两个状态。默认状态是login。如下
</fx:Script>
<fab:states>
<s:State name="login"/>
<s:State name="main"/>
</fab:states>
    <s:Button click="this.currentState='main'" includeIn="login"/>
    <view:HelloWorldGroup id="helloWorldGroup" includeIn="main"/>
这样的话,在HelloWorldModuleMediator.as中的
public function get helloWorldGroup():HelloWorldGroup {
            return helloWorld.helloWorldGroup as HelloWorldGroup ;
        }
helloWorldGroup还是null。这样就会报错了。这个问题要怎么解决呢。希望你见到能给我答复。非常感谢。
1 楼 flex_莫冲 2011-01-31  
非常感谢。这种好资料太少了。

相关推荐

Global site tag (gtag.js) - Google Analytics